Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: tiutiu en 29 de Septiembre de 2003, 07:49:52 PM

Título: Collision Detection
Publicado por: tiutiu en 29 de Septiembre de 2003, 07:49:52 PM
 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)??
Título: Collision Detection
Publicado por: DraKKaR en 29 de Septiembre de 2003, 09:38:02 PM
 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.
Título: Collision Detection
Publicado por: _Grey en 30 de Septiembre de 2003, 03:42:32 AM
 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.
Título: Collision Detection
Publicado por: MChiz en 30 de Septiembre de 2003, 08:10:05 AM
 Cilindrooo! Cuando se trata de un personaje el cilindro va mu bien : )
Título: Collision Detection
Publicado por: AK47 en 30 de Septiembre de 2003, 10:45:42 AM
 Hola
Tambien puedes tirar de elipsoides. Hay un articulo muy completo en flipcode. Miralo :D
Título: Collision Detection
Publicado por: ALBSIM en 30 de Septiembre de 2003, 11:43:59 AM
 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  
Título: Collision Detection
Publicado por: Mars Attacks en 30 de Septiembre de 2003, 02:28:33 PM
 Pues yo los inscribiría en icosaedros alargados con normales invertidas y pintadas de rojo.
Ale, a ver quién es más chulo.
Título: Collision Detection
Publicado por: tiutiu en 01 de Octubre de 2003, 11:28:59 AM
 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
Título: Collision Detection
Publicado por: samsaga2 en 02 de Octubre de 2003, 05:07:05 PM
 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.
Título: Collision Detection
Publicado por: tiutiu en 04 de Octubre de 2003, 12:49:20 PM
 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.