Foros - Stratos

Programadores => Programación gráfica => Mensaje iniciado por: SkyNetBCN en 11 de Noviembre de 2006, 03:16:04 PM

Título: Colisiones
Publicado por: SkyNetBCN en 11 de Noviembre de 2006, 03:16:04 PM
Hola de nuevo... como algunos de vosotros ya sabréis, estoy empezando a hacer mis primeras chapucillas con DirectX 9 y c++.

Me gustaría saber cual considerais que es la mejor manera (y como mejor me refiero a la más simple, aunque sea más precisa) de detectar colisiones entre un objeto (Mesh.x) y lo que sería el jugador en un juego en 1ª persona...
quizás creando una "esfera" alrededor de la camara detectando si el mesh se encuentra dentro de la esfera? no sé, esque realmente no tengo ni idea... cual es vuestra opinión?

Gracias!!

Saludos
Título: colision en motores
Publicado por: coldev en 11 de Noviembre de 2006, 10:23:15 PM
bajate el

http://irrlicht.sourceforge.net/

incluye el codigo fuente.

o mejor aun el true vision:
http://www.truevision3d.com/
Título: Colisiones
Publicado por: Alexpi en 12 de Noviembre de 2006, 10:35:50 AM
Lo normal, es usar un cubo que rodee a cada mesh, este cubo no se renderiza, pero sus 8 vertices se usan para calcular la distancia entre ellos y el jugador, y asi saber si esta "tocandolo".

Un cubo es la solucion mas facil, se puede aumentar los vertices, y en lugar de un cubo, usar una figura con un aspecto parecido al modelo (pero sin detalles y muchisimos menos poligonos) y asi tienes colisiones mas realistas, pudiendo diferenciar si le disparan en la cabeza, brazos etc.

Claro esta, cuanto mas poligonos tenga más cpu consumira en calculos.

Un salu2
Título: Colisiones
Publicado por: zupervaca en 12 de Noviembre de 2006, 11:41:17 AM
Es una tonteria, pero puede que te ayude en algo: http://www.davidib.com/tutoblog_2006.asp#tuto1
Título: Colisiones
Publicado por: marcode en 12 de Noviembre de 2006, 05:41:02 PM
Puedes considerar al jugador como un cilindro vertical y comparar cada vértice del mesh si está dentro. Si las coordenadas (X, Z) de un vértice están dentro del radio y la (Y) está dentro de la altura mínima y máxima es que hay colisión.

Aunque antes deberás hacer una selección previa de todos aquellos meshes que por su proximidad deban ser comprobados más detalladamente.

Otro problema es que para muros y otros objetos grandes deberás tener en cuenta también las intersecciones, entonces tal vez sería mejor comprobar polígonos en lugar de vértices.
Título: +Colisiones
Publicado por: SkyNetBCN en 12 de Noviembre de 2006, 09:35:28 PM
Crear un "cubo" con una forma parecida al mesh es complicado, ya que posiblemente el mesh sea un mapa sobre el que se caminará y puede llegar a ser bastante complejo...

Me gusta lo de comprobar si las coordenadas de un vértice está dentro del radio... decis que mejor sería comprobar los polígonos en lugar de los vértices? jeje, no sabía que podía hacer eso...  :D (ya sabeis que soy nuevo)

seguramente el mesh será muy grande (repito, un mapa), así que supongo que sería muy lento recorrer cada vez todos los vertices/poligonos del mesh, no?

Gracias por vuestras opiniones...
Título: Colisiones
Publicado por: BeRSeRKeR en 12 de Noviembre de 2006, 10:10:35 PM
En ese caso necesitarás un sistema de particionamiento del espacio (por ejemplo un octree) para acelerar los cálculos de colisión.

Y por supuesto, tendrás que detectar la colisión por polígono. Y luego tendrás que hacer que el objeto de colisión de la cámara (una esfera, o lo que sea), se deslice sobre la superficie de colisión (sliding plane).

Saludos.
Título: Colisiones
Publicado por: SkyNetBCN en 14 de Noviembre de 2006, 10:41:03 PM
jeje, Como si me hablaseis en chino... dando por hecho que hay muy poca documentación por internet de todo esto... alguien me puede decir por donde empezar? Recordar que soy nuevo...  :D

Gracias
Título: Colisiones
Publicado por: BeRSeRKeR en 15 de Noviembre de 2006, 12:28:21 AM
Sobre octrees hay bastantes documentos. Busca en Google, seguro que encuentras. De todas formas tienes una introducción sobre octrees escrita por nuestro compañero Lord Trancos, aquí (http://dxlab.host.sk/articul11.html). Ahí mismo, al final del todo, tienes enlaces sobre octrees.

En cualquier caso hay más sistemas de particionamiento del espacio (BSP trees, KD trees, etc).

Y con respecto a las colisiones, un buen documento es Improved Collision Detection & Response (http://www.peroxide.dk/tuts_c.shtml) de Kasper Fauerby aka Telemachos.

Saludos.