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?
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.
En línea
Por favor, no me manden MP con dudas. Usen el foro, gracias.
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. ...
« Última modificación: 13 Abril 2013, 19:50 pm por leosansan »
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".