Hola por aquí. Este es el concepto detrás de todas las colisiones (no se aceptan reclamos por mis dibujos en ascii):
Código:
los modelos 3d en Blitz están formados por Mayas (Mesh), que a su vez están.
Formadas por triángulos. Cada triángulo se define por sus vértices, que son.
Coordenadas en x-y-z:
V1 = (x1, y1, z1).
/\.
/.
/.
/.
/_ _ _ _.
V2 v3.
Cuando mueves un triángulo seguirá un movimiento lineal:
/\.
/ \ distancia = velocidad * tiempo.
/ \ ->.
/.
/_ _ _ _.
Este movimiento describe un volumen (inclino un poco el triángulo para verlo mejor):
Tiempo inicial tiempo final.
| |.
________________________.
/\ /\.
/ \ /.
/ \ __________________/____\.
/ __-- / __.
/__--____________________/__.
Si el triángulo colisiona con una esfera, eso significa que la esfera quedará.
Dentro del volumen que describe el triángulo al moverse (la zona punteada esta.
Metida en la esfera):
_ _ _ _ _ _.
/.
_____________/__________.
/\ /./\.
/ \ |./.\ |.
/ \ ________|_________/____\ |.
/ __-- |./.__-- |.
/__--____________|_______/__-- |.
\ /.
\ /.
\ _ _ _ _ _ _ _ /.
Ahora lo que necesitas es simplificar el problema para resolverlo matemáticamente.
Si te lo imaginas, ese volumen del triángulo en movimiento es como un prisma.
Si el prisma entra en la esfera, esta necesariamente deberá tocar alguna de.
Las 3 caras o planos laterales (a, b, o c):
________________________.
/\ plano a (adelante) /\.
/ \ plano b (atrás)/.
/ \ __________________/____\.
/ __-- Plano c (abajo)/ __.
/__--____________________/__.
Entonces necesitas resolver la intersección de los 3 planos y la superficie de la.
Esfera, que se hace con el siguiente pseudo-código:
Producto_punto_del_plano = productopunto (normal_del_plano, un_punto_en_el_plano).
Distancia = productopunto (centro_de_la_esfera, normal_del_plano) - Producto_punto_del_plano.
Hay_colision = valorabsoluto (distancia) <= radio_de_la_esfera.
Repites esta prueba para los 3 planos, y vuelves a repetir todo para cada triángulo.
De la Maya. Si alguna prueba es positiva entonces habrá colisión.
Y este es el fundamento de todas las demás colisiones.
Espero que te ayude. Te dejo de tarea traducirlo a Blitz BASIC. Si tienes alguna duda avísame, pero en general si no entiendes algún concepto matemático tendrías que estudiarlo.
Posdata: por cierto, que me faltó un caso, pero si entiendes el concepto seguro lo descubrirás. Saludos.
Marco.