Я реализовал простой движок физики 3D игр. У меня уже есть приличное обнаружение столкновений, теперь я пытаюсь выяснить, как реагировать на столкновения. Я использую импульсный метод для расчета скоростей после столкновения. Это работает довольно хорошо, однако, это не полностью мешает телам продолжать проникновение. Так что у меня есть дополнительный кусок кода для разрешения проникновения. В настоящее время я просто перемещаю тела вдоль нормали контакта на половину глубины проникновения - первое тело в направлении нормали контакта, второе тело в противоположном направлении.
Это нормально в большинстве случаев, но есть некоторые нежелательные эффекты. Например, представьте себе узкий коридор и объект, движущийся по нему. Если объект попадает в одну из стен коридора, разрешение проникновения перемещает его в противоположную стену, затем в следующем кадре обратно в первую стену и так далее. В результате объект очень быстро вибрирует между стенами, что не очень красиво.
Итак, мой вопрос, есть ли лучший способ разрешить проникновение? Возможно, не перемещайте тела, просто как-то отрегулируйте их скорости (в дополнение к вычислению импульсов), чтобы они перестали двигаться навстречу друг другу, и проникновение разрешается само по себе в следующие пару кадров. Я просто догадываюсь здесь. Любые идеи?