Ayuda con las matemáticas 2 !!!

Iniciado por BlackM4ster, 13 Abril 2013, 18:44 PM

0 Miembros y 1 Visitante están viendo este tema.

BlackM4ster

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?
- Pásate por mi web -
https://codeisc.com

amchacon

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):



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.
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

leosansan

#2
Cita de: Black Master 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?


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. ...

amchacon

Cita de: leosansan en 13 Abril 2013, 19:46 PMTiene 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).
Por favor, no me manden MP con dudas. Usen el foro, gracias.

¡Visita mi programa estrella!

Rar File Missing: Esteganografía en un Rar

BlackM4ster

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:
Video: [youtube=640,360]http://www.youtube.com/watch?v=PdWymO3883Y[/youtube]

PD: El plano A y B están Horizontales los dos
- Pásate por mi web -
https://codeisc.com