Estoy trabajando en un juego basado en mosaicos 3D y estoy usando la detección de colisiones AABB. Por cada cubo que el jugador se cruza, encuentro que el eje a lo largo del cual el jugador está intersectando el cubo es el que menos, y empujo al jugador fuera del cubo a lo largo de ese eje.Colisión AABB deslizante: atascarse en los bordes
Dependiendo del orden en que se revisen los cubos, esto puede causar problemas al deslizarse a lo largo del borde de varios cubos. He creado un diagrama que debe explicar el problema:
- Flecha # 1 es el intento de movimiento del jugador. Las otras flechas son la respuesta de colisión.
- En el diagrama de la izquierda, la colisión se prueba primero contra el cubo derecho, lo que hace que el jugador sea empujado hacia la izquierda y luego hacia arriba. (malo)
- En el diagrama de la derecha, la colisión se prueba primero contra el cubo izquierdo, haciendo que el jugador sea empujado hacia arriba, en cuyo punto el jugador ya no se está cruzando con el otro cubo. (buena)
¿Alguna idea sobre lo que la forma más eficiente para resolver esto podría ser? ¿O alguna forma mejor de manejar la respuesta de colisión?
Gracias.
Tal comprobar todas las colisiones y anotar el tiempo (o distancia) de la colisión. Aplique solo la colisión que ocurra lo más pronto posible. Opcionalmente continúe el proceso por el resto del paso de tiempo. –
Así que si clasifiqué todos los cubos con los que el jugador se cruzaba por la distancia del jugador, y luego los consideraba uno a la vez, eso podría funcionar. Estoy pensando que sería mejor evitar tener que ordenar las cosas en cada fotograma, pero no estoy seguro de que importe mucho, ya que el jugador solo podría estar colisionando con hasta? 7? bloques a la vez. ¿Crees que hay algo de qué preocuparse? – Jeff