Скользящее столкновение AABB - застревание на краях

Я работаю над трехмерной игрой, основанной на тайлах, и использую обнаружение столкновений AABB. Для каждого куба, который игрок пересекает, я нахожу ось, вдоль которой игрок пересекает куб меньше всего, и выталкиваю игрока из куба вдоль этой оси.

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

http://imgur.com/mmK0W. png

  • Стрелка №1 - это попытка игрока передвинуться. Остальные стрелки - реакция на столкновение.
  • На левой диаграмме сначала проверяется столкновение с правым кубом, в результате чего игрок толкается влево, а затем вверх. ( bad )
  • На правой диаграмме сначала проверяется столкновение с левым кубом, в результате чего игрок толкается вверх, после чего игрок больше не пересекает другой куб. ( хорошо )

Есть идеи, какой может быть наиболее эффективный способ решения этой проблемы? Или есть какие-нибудь лучшие способы справиться с ответом на столкновение?

Спасибо.

6
задан Jeff 10 October 2010 в 22:31
поделиться