Кращий / ефективний спосіб втілити 3d зіткнення


16

Я вже запрограмував систему зіткнення на основі 2d для попередньої гри. Це була моя перша система зіткнень, і це було некрасиво. Я шукав зіткнення між об’єктами, перевіряючи всі об'єкти з усіма об'єктами. Я вже чув про сітчасту систему з осередками, де об’єкт буде дивитись лише зіткнення з іншими об'єктами з його поточних комірок. Це дійсно хороший спосіб перевірити зіткнення?

Я хотів би мати гарну техніку, щоб провести цикл через усі мої предмети в 3d-світі.

Відповіді:


11

Вам знадобиться хороший алгоритм розподілу простору, який зазвичай використовується в 3D - це октриси .

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

Дивіться це зображення: множинні сфери обмеження


12

Зрештою, я думаю, що відповідь на ваше питання залежатиме від потреб вашої конкретної програми, оскільки не існує рішення, яке підходить одному розміру. Хоча в Інтернеті є чимало гідних ресурсів, ви заощадите собі багато часу та розчарувань, вибравши Крістер Еріксон « Виявлення зіткнення в реальному часі» Крістера Еріксона , в якому детально викладено найрізноманітніші методи та алгоритми, наприклад C ++ код.

Це допомогло мені зробити дитячі кроки, перш ніж стрибати в спробі побудувати грандіозну систему. Написання функції, щоб визначити, чи точка знаходиться в площині, то якщо точка знаходиться в трикутнику, якщо промінь є в трикутнику і т. Д. Потім переходимо до статичних випробувань різних опуклих твердих тіл: AABB vs. Triangle тощо. Часи, які здавались непрохідними (пробачте каламбур), спочатку стали менш грізними. Ось перелік хорошої кількості тестів із прикладом коду:

http://www.realtimerendering.com/intersections.html

Тим часом, оскільки я знаю, що не кожен може за власним бажанням виплатити 70-80 доларів за книгу, ось які умови ви можете розглянути:

  • Просторова перегородка, октреси, квадрати, дерева BSP
  • BIH Дерева
  • Обмеження обсягів та обмеження ієрархій обмеження
  • Дискретне проти безперервного виявлення зіткнень
  • Роздільна теорема осі
  • Алгоритм GJK
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.