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?