Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: BlackM4ster en 13 Abril 2013, 18:44 pm



Título: Ayuda con las matemáticas 2 !!!
Publicado por: BlackM4ster en 13 Abril 2013, 18:44 pm
Hola, estoy intentando programar el motor de colisiones. El problema viene cuando tengo 2 cubos (A y B) y cuando se supone que chochan es cuando alguno de los 4 vertices inferiores de A choca con el plano superior de B. Como calculo colision Punto-Plano?


Título: Re: Ayuda con las matemáticas 2 !!!
Publicado por: amchacon en 13 Abril 2013, 19:36 pm
Sinceramente, tengo curiosidad por saber que estás haciendo  ;-)

La colisión punto-plano se hace comprobando si el punto pertenece al plano en cuestión.

La forma más sencilla sería sacar la ecuación implicita del plano y sustituir. Esta es ecuación de un plano delimitado por 3 vertices (el cuarto sobra):

(http://aulafacil.com/matematicas/plano-en-el-espacio/curso/planoenelespacio93.jpg)

X1,X2,X3 son las coordenadas de los tres vertices. X,Y,Z representarían el punto que quieres comprobar.

Sustituye por los valores correspondientes, realiza el determinante y comprueba que sea cero. Si no lo es, entonces no pertenece al plano.


Título: Re: Ayuda con las matemáticas 2 !!!
Publicado por: leosansan en 13 Abril 2013, 19:46 pm
Hola, estoy intentando programar el motor de colisiones. El problema viene cuando tengo 2 cubos (A y B) y cuando se supone que chochan es cuando alguno de los 4 vertices inferiores de A choca con el plano superior de B. Como calculo colision Punto-Plano?


Una forma es hallar la ecuación del plano superior del cubo B, con tres vértices es suficiente. Se producirá colisión cuando al sustituir los vértices inferiores de A en dicha ecuación alguno la cumplan.

Tiene el inconveniente que se supone un movimiento "continuo", cosa que supongo no será así sino en incrementos determinados. En este caso la colisión se producirá si la ZveticesA > (o <, según el sistema de referencia) ZecuaciónDelplano.

Pero mejor pones una imagen de como están los cubos, en especial el B, ya que si está horizontal bastará con comparar las ZvérticesA con la ZplanosuperiorB.

Saluditos. ...(http://st.forocoches.com/foro/images/smilies/ciao.gif)


Título: Re: Ayuda con las matemáticas 2 !!!
Publicado por: amchacon en 13 Abril 2013, 19:50 pm
Tiene el inconveniente que se supone un movimiento "continuo"
Cierto. Habría que añadir un pequeño margen (por ejemplo, si el determinante está entre -0,5 y 0,5. Entonces hay colisión).


Título: Re: Ayuda con las matemáticas 2 !!!
Publicado por: BlackM4ster en 14 Abril 2013, 11:35 am
Saco una foto, estoy haciendo un game engine (mi primer juego, justo acababa de aprender c++ de forma decente cuando me metí con OpenGL). Os cuento el problema desde el principio:
Tengo 3 tipos de detectores de colisiones programados:
 - Bounding sphere (para cosas que no requieren precision absoluta como coger monedas)
 - Axis aligned Bounding Box (Los bloques de terreno "B")
 - Objet aligned bounding box (El personaje "A")
Tengo programada una simulación de la gravedad que hace que cada frame (el juego está capado a 30fps) baje un poco a no ser que haya colision. Detectar la colision entre los dos bloques es fácil, pero no sé luego como saber si estoy chocando de frente, en vertical y a partir de eso evitar ciertos movimientos (como saltar teniendo algo encima o caminar hacia otro objeto)
Dejo un video del juego en cuestión (Minuto 2:15, donde el cursor es rojo, es el que digo)
Os dejo una foto de las bounding box también. Mi problema es detectar si choca de frente o en vertical con el suelo y la forma de hacerlo, se me ocurrió vertice a vertice comprobar en el plano del "suelo".

Foto: (http://img198.imageshack.us/img198/886/plantillajuego201304141.bmp)
Video: PdWymO3883Y

PD: El plano A y B están Horizontales los dos