Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Collision Detection

Iniciado por tiutiu, 29 de Septiembre de 2003, 07:49:52 PM

« anterior - próximo »

tiutiu

 Pues eso, voy a comenzar con el tema de las colisiones en el engine y por ahora lo veia facil ya que pensaba solo en el siguiente caso: colision entre una esfera/caja y otra esfera/caja. Por ejemplo un personaje con el suelo, con un arbol, una roca, etc...

Pero claro, y si tengo q pasar a traves del objeto? (un granero, cobertizo, puente cubierto, ...). Mi pregunta es: que sera mas eficiente? usar un OBB-Tree o sacar un convex hull (con un editor de modelos, precalculando los puntos del hull y sacando una especie de malla de <100 triangulos contra la q colisionar)??
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

DraKKaR

 A mi parecer, los objetos de los que hablas (un granero, cobertizo, puente cubierto, ...) no deberían formar parte del tipo 'objetos' sino del tipo 'estructura del escenario'. Lo normal es que ese tipo de objetos formen parte de la estructura del mapa, con lo que los cálculos de colisiones se pueden aligerar con comprobaciones contra octrees y estructuras de ese tipo. De todas formas, si necesitas que esos objetos tengan comportamientos dinámicos puedes usar OBBs, es un poco costosillo calcularlos (tienes que calcular centros de masa, ejes de inercia..., covarianzas) pero una vez estén construidos te pueden aligerar bastante los cálculos, asi que son una buena solución si la malla de vértices no va a alterarse.

_Grey

 Creo que lo mejor sera que trates al personaje como una esfera o un cubo, y calcula la colision a ese objeto complejo poligono a poligono, lo mejor es que sea una version reducida del objeto con los minimos poligonos imprescindibles para calcular la colision con el nivel que te interese.

Tambien puedes "envolver" ese objeto con un cubo o una esfera, comprobar primero esta colision y si se produce pasar a calcular poligono a poligono.

MChiz

 Cilindrooo! Cuando se trata de un personaje el cilindro va mu bien : )

AK47

 Hola
Tambien puedes tirar de elipsoides. Hay un articulo muy completo en flipcode. Miralo :D

ALBSIM

 Pues yo me decanto por los AABB trees, ya que aunque parecen ser mas lentas que los OBB trees, permiten una rápida actualización para objetos deformables. Si te interesa, mira este doc:
vandenbergen98efficient  

Mars Attacks

 Pues yo los inscribiría en icosaedros alargados con normales invertidas y pintadas de rojo.
Ale, a ver quién es más chulo.

tiutiu

 No no, si el problema no es el BV del personaje, para ese usare por ahora esfera/AABB, ese no es el problema. El problema es si partir las mallas del terreno (ya repartidas en el quadtree, por supuesto) en un OBB-Tree o calcular un convex hull para la malla, con lo que como alguno ha sugerido tendria una malla ultra lowpoly contra la q colisionar.
Si fuese un OBB-tree pues lo calcularia al cargar todo, ya que son mallas estaticas (lo cual evita el problema de recalcularlas). Mi problema es que no se si es muy costoso la interseccion rayo-obb o punto-obb
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos

samsaga2

 Usas un quadtree? Pues lo que puedes hacer es hacerte una funcion rayo-intersecta-triangulo optimizada para quadtrees (busca tutos o sources con el google).  Despues te implementas una funcion tipo colision-esfera-octree y listos.

De cualquier forma la manera mas rapida de detectar colisiones hoy en dia es con un bsp-tree.

tiutiu

 En fin, despues d mirar por ahi he decidido que usare OBB-Tree, que tampoco es tan complejo calcular las colisiones. De hecho usare OBB para todas las mallas estaticas, y un unico obb en los modelos dinamicos en vez d aabb. Total, simplemente tengo q rotar sus ejes cuando rote el personaje, aprovechando su matriz d rotacion.
b>:: Pandora's Box project ::
Notas e ideas sobre desarrollo de engines para juegos






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.