He implementado un simple motor de física de juegos en 3D. Ya tengo una detección de colisión decente, ahora estoy tratando de averiguar la parte de respuesta a colisión. Estoy usando un método basado en impulsos para calcular las velocidades posteriores a la colisión. Esto funciona bastante bien, sin embargo, no evita por completo que los cuerpos sigan interpenetrando. Entonces tengo un código adicional para resolver la penetración. Actualmente, solo muevo los cuerpos a lo largo del contacto normal a la mitad de la profundidad de penetración: primer cuerpo en la dirección del contacto normal, segundo cuerpo en la dirección opuesta.
Esto está bien la mayor parte del tiempo, pero hay algunos efectos indeseables. Por ejemplo, imagine un corredor estrecho y un objeto moviéndose a través de él. Si el objeto golpea una de las paredes del corredor, la resolución de penetración lo mueve hacia la pared opuesta, luego, en el siguiente cuadro, nuevamente dentro de la primera pared y así sucesivamente. El efecto es que el objeto vibra muy rápido entre las paredes, lo que no es bonito.
Entonces, mi pregunta es si hay una mejor manera de resolver la penetración. Quizás no mueva los cuerpos, solo ajuste de alguna manera sus velocidades (además del cálculo del impulso) para que dejen de moverse el uno hacia el otro y la penetración se resuelva en los próximos dos cuadros. Solo estoy adivinando aquí. ¿Algunas ideas?
Echa un vistazo a este artículo, que se ha publicado aquí muchas veces antes, solo busca a través de las preguntas y respuestas etiquetadas de detección de colisión: te muestra cómo hacer la resolución de colisión "continua" de la que hablaba Stephelton:
http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3
Básicamente, resuelve algunas ecuaciones cinemáticas básicas para el punto de tiempo exacto cuando sus dos cuadros delimitadores comenzaron a cruzarse. Resuelve sus colisiones en ese momento exacto y luego continúa con el tiempo restante en su marco. Es posible que tenga que volver a simular lo que sucede después del momento de la colisión, ya que las velocidades / aceleraciones de sus objetos habrán cambiado. Pero ahí está tu punto de partida, de todos modos ... ¡salud!
fuente