Как выполнить обнаружение столкновения в трехмерном пространстве?


8

Я должен написать, что можно охарактеризовать как полную 3D-игру с нуля в этом семестре. До сих пор я программировал только 2D игры в свободное время, переход не кажется сложным, игра проста. Единственная проблема, которую я имею, - обнаружение столкновения. Единственное, что я мог найти, это AABB, ограничивающие сферы или рекомендации различных физических движков. Я должен запрограммировать подводную лодку, которая будет свободно перемещаться внутри пещерной системы, AFAIK. Я не могу использовать физические библиотеки, поэтому ни одно из вышеперечисленного не решает мою проблему.

До сих пор я использовал SAT для обнаружения столкновений. Существуют ли похожие, отличные алгоритмы, но созданные для 3D-столкновений? Я не говорю о октреях или других оптимизациях, я говорю о прямом обнаружении столкновений одного набора 3D-полигонов с другим набором 3D-полигонов. Я думал об использовании SAT дважды, проецируя сетку сверху и сбоку, но потом кажется, что даже трудно разделить трехмерное пространство на выпуклые формы. Кроме того, это кажется слишком сложным вычислением даже с октреями.

Как это делают профессионалы? Может ли кто-нибудь пролить свет?


1
Разделить трехмерное пространство на выпуклую геометрию не так сложно. Например, используя BSP-дерево (разбиение двоичного пространства).
Maik Semder

Ответы:


5

GJK работает на выпуклых формах, я мог бы также использовать SAT. Я нашел информацию, которую я уже хотел. Вот некоторые примеры:

Подводя итог, я буду делать проверки столкновения сферы или эллипсоида на множественные треугольники, которые образуют сетку столкновений. Похоже, это то, как это делается, и это та информация, о которой я просил, если кто-то не скажет мне иначе.


1

Эй, я написал о GJK в 3D здесь. SAT медленнее, чем GJK http://in2gpu.com/2014/05/18/gjk-algorithm-3d/


Ответы только на ссылки, как правило, довольно плохие, так как они становятся недействительными, как только движется, и они плохо ищут. Попробуйте расширить этот ответ, включив в него некоторую информацию о деталях решения, которое вы пытаетесь представить.

о, хорошо, я думал, что это хорошо
Сергей Крайтою

0

Ну, если это не что-то очень сложное и современное, вы могли бы начать с реализации алгоритма обнаружения столкновений Гилберта . Его можно сделать достаточно быстрым и быстрым, при условии, что геометрия вашего столкновения не настолько детализирована (и это не обязательно!). Вот так даже некоторые тренажеры добиваются цели. Что-нибудь более сложное, вероятно, потребует больше усилий.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.