Я реализовал простой движок физики 3D игр. У меня уже есть приличное обнаружение столкновений, теперь я пытаюсь выяснить, как реагировать на столкновения. Я использую импульсный метод для расчета скоростей после столкновения. Это работает довольно хорошо, однако, это не полностью мешает телам продолжать проникновение. Так что у меня есть дополнительный кусок кода для разрешения проникновения. В настоящее время я просто перемещаю тела вдоль нормали контакта на половину глубины проникновения - первое тело в направлении нормали контакта, второе тело в противоположном направлении.
Это нормально в большинстве случаев, но есть некоторые нежелательные эффекты. Например, представьте себе узкий коридор и объект, движущийся по нему. Если объект попадает в одну из стен коридора, разрешение проникновения перемещает его в противоположную стену, затем в следующем кадре обратно в первую стену и так далее. В результате объект очень быстро вибрирует между стенами, что не очень красиво.
Итак, мой вопрос, есть ли лучший способ разрешить проникновение? Возможно, не перемещайте тела, просто как-то отрегулируйте их скорости (в дополнение к вычислению импульсов), чтобы они перестали двигаться навстречу друг другу, и проникновение разрешается само по себе в следующие пару кадров. Я просто догадываюсь здесь. Любые идеи?
Ознакомьтесь с этой статьей, которая была опубликована здесь много раз раньше, просто выполните поиск в разделе «Вопросы и ответы» по обнаружению столкновений, и в нем показано, как выполнить «непрерывное» разрешение столкновений, о котором говорил Стивелтон:
http://www.gamasutra.com/view/feature/3383/simple_intersection_tests_for_games.php?page=3
По сути, вы решаете некоторые основные уравнения кинематики для точного момента времени, когда ваши две ограничивающие рамки начали пересекаться. Вы решаете свои коллизии в тот самый момент, а затем переходите к оставшемуся времени в вашем кадре. Возможно, вам придется заново смоделировать то, что происходит после момента столкновения, так как скорости / ускорения ваших объектов будут изменены. Но в любом случае, у вас есть отправная точка ... ура!
источник