¿Cómo realizar la detección de colisión en el espacio 3D?

8

Tengo que escribir, lo que se puede resumir como un juego 3D completo desde cero este semestre. Hasta ahora solo he programado juegos 2D en mi tiempo libre, la transición no parece difícil, el juego es simple. El único problema que tengo es la detección de colisiones. Lo único que pude encontrar fue AABB, esferas limitantes o recomendaciones de varios motores de física. Tengo que programar un submarino que se moverá libremente dentro de un sistema de cuevas, AFAIK No puedo usar bibliotecas de física, por lo que nada de lo anterior resuelve mi problema.

Hasta ahora estaba usando SAT para mi detección de colisión. ¿Hay algún algoritmo similar, excelente, pero diseñado para colisión 3D? No estoy hablando de octrees u otras optimizaciones, estoy hablando de la detección de colisión directa de un conjunto de polígonos 3D con otro conjunto de polígonos 3D. Pensé en usar SAT dos veces, proyectar la malla desde la parte superior y lateral, pero luego parece tan difícil incluso dividir el espacio 3D en formas convexas. Además, eso parece demasiado cálculo incluso con octrees.

¿Cómo lo hacen los profesionales? ¿Podría alguien arrojar algo de luz?

dreta
fuente
1
No es tan difícil dividir el espacio 3D en geometría convexa. Por ejemplo, utilizando un árbol BSP (partición de espacio binario).
Maik Semder

Respuestas:

5

GJK trabaja en formas convexas, también podría usar SAT. He encontrado la información que ya quería. Aquí hay unos ejemplos:

Para resumir, haré controles de colisión de una esfera o un elipsoide contra múltiples triángulos que forman una malla de colisión. Así es como se hace y esa fue la información que estaba solicitando, a menos que alguien pueda decirme algo diferente.

dreta
fuente
1

Hola, escribí sobre GJK en 3D aquí. SAT es más lento que GJK http://in2gpu.com/2014/05/18/gjk-algorithm-3d/

Sergiu Craitoiu
fuente
Las respuestas de solo enlace tienden a ser bastante pobres, ya que se vuelven inválidas tan pronto como se mueven y no buscan bien. Considere expandir esta respuesta para incluir información sobre los detalles de la solución que está tratando de presentar.
oh, ok, pensé que estaba bien
Sergiu Craitoiu
0

Bueno, si no es algo muy exigente y de vanguardia, puede comenzar implementando el algoritmo de detección de colisión de Gilbert . Se puede hacer que sea bastante rápido y será rápido, siempre que su geometría de colisión no sea tan detallada (¡y no es necesario que lo sea!). Así es como incluso algunos simuladores hacen el truco ... cualquier cosa más elaborada probablemente tomará más esfuerzo en consideración.

teodron
fuente