La mejor y más eficiente forma de implementar una colisión 3d

Ya programé un sistema de colisión basado en 2d para un juego anterior. Fue mi primer sistema de colisión y Era feo. Estaba buscando colisión entre objetos comprobando todos los objetos con todos los objetos. Ya escuché acerca de un sistema de cuadrícula con celdas donde un objeto solo verá la colisión con otros objetos de su (s) celda (s) actual (es). ¿Es realmente una buena forma de comprobar la colisión?

Me gustaría tener una buena técnica para recorrer todos mis elementos en un mundo en 3D.

Respuesta

Vas a necesitar un buen algoritmo de partición de espacio, los que se utilizan comúnmente en 3D son octrees .

Después de eso, podría rodear modelos, etc. con esferas delimitadoras en las que encajan perfectamente porque una colisión entre esferas delimitadoras es muy fácil de calcular. Una vez que sepa que dos esferas delimitadoras chocan, puede hacer iterativamente las esferas delimitadoras más pequeñas y agregar esferas delimitadoras para mantener el objeto cubierto en ellas, o usar otro algoritmo inteligente para calcular las colisiones entre dos objetos complejos.

Consulte esta imagen: múltiples esferas delimitadoras

Respuesta

En última instancia, creo que la respuesta su pregunta dependerá de las necesidades de su aplicación en particular, ya que no existe una solución única para todos. Aunque hay una serie de recursos decentes en la web, se ahorrará mucho tiempo y frustración al captar la Detección de colisiones en tiempo real de Christer Ericson, que describe en gran detalle una amplia variedad de técnicas y algoritmos, con ejemplo de código C ++.

Me ayudó a dar pequeños pasos antes de intentar construir un gran sistema. Escribir una función para determinar si un punto está en un plano, n si un punto está en un triángulo, si un rayo está en un triángulo, etc. Luego, pasamos a pruebas estáticas de varios sólidos convexos: AABB vs. Triángulo, etc. Con el tiempo, las cosas que parecían impenetrables (perdone el juego de palabras) al principio menos intimidante. Aquí hay una lista de un buen número de pruebas, con código de ejemplo:

http://www.realtimerendering.com/intersections.html

Mientras tanto, ya que sé que no todo el mundo puede desembolsar entre 70 y 80 $ por un libro a voluntad, aquí hay algunos términos que le recomendamos que analice:

  • Partición espacial, octrees, quadtrees, árboles BSP
  • árboles BIH
  • Volúmenes límite y jerarquías de volumen límite
  • Detección de colisión discreta versus continua
  • Teorema del eje de separación
  • Algoritmo GJK

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *