Обнаружение столкновений и реагирование с несколькими объектами - PullRequest
0 голосов
/ 31 декабря 2018

Итак, я реализовал обнаружение столкновений для выпуклых многогранников в трехмерном пространстве, используя GJK для обнаружения столкновений и EPA для получения вектора разрешения.Это хорошо работает, когда объект сталкивается только с одним другим объектом, как вы справляетесь со столкновением, когда один объект сталкивается с несколькими объектами?Рассмотрим следующий сценарий: красное поле - это игрок, идущий направо, а два черных ящика - это всего лишь несколько объектов, по которым игрок может ходить (под действием силы тяжести игрок опускается внутрь этих объектов): enter image description here Вектор минимального разрешения для столкновения с правым квадратом находится в направлении, идущем прямо влево, а вектор минимального разрешения для столкновения с левым квадратом - в направлении, идущем прямо вверх.Поскольку ящики могут появляться в произвольном порядке, сначала удаление игрока из правого объекта приводит к внезапной остановке.Тогда игрок будет решен от левого объекта, перемещая его / ее вверх.В результате игрок ударился о стену.Начало с левого объекта сначала облегчает эту проблему, потому что тогда игрок не сталкивается с правым объектом.Так, может быть, есть какой-то особый порядок применения векторов разрешения?

Как предотвратить это?Я, очевидно, не хочу, чтобы проигрыватель запускался поверх очищенных объектов, а затем внезапно останавливался.

Объекты и проигрыватель также могут быть произвольным выпуклым многогранником в трехмерном пространстве, решение должно иметь возможность обрабатывать одно и то жеситуация, когда игрок скользил по стене или прыгнул и скользил по потолку.

...