Як можна виявити зіткнення на об'єктах, виготовлених з багатьох маленьких трикутників?


13

Я розумію, що будь-яку форму можна створити (або наблизити) меншими трикутниками. Будь-який прямокутник можна створити двома меншими трикутниками. Будь-яке коло можна створити безліччю тонких трикутників "піца". Як це перекладається на виявлення зіткнення?

Я розумію, як обчислити перекриття прямокутника за допомогою вершин. Я розумію, як обчислити перекриття кола, використовуючи центр, радіуси та відстань.

Але, як можна виявити зіткнення на фігурах, виготовлених з маленьких трикутників? Не специфіка, а просто загальна концепція….

Відповіді:


26

Але, як можна виявити зіткнення на фігурах, виготовлених з маленьких трикутників?

Не роблячи цього.

Виявлення зіткнення проти довільної трикутникової колекції (або ще гірше, між двома колекціями довільних трикутників) є надмірно дорогим.

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

Це дозволяє нам швидко відхилити більшість потенційних зіткнень як "не відбуваються", що є звичайним випадком. У випадку, коли така жорстка перевірка проходить, це вказує на потенційне фактичне зіткнення, і ми переходимо до перевірки на предмет більш детального наближення основної форми (наприклад, такої, яка виготовлена ​​з декількох щільно приталених форм капсули, або багатьох вирівняні обмежувальні коробки).

По суті, виявлення зіткнення починається з грубих випробувань і, коли ці випробування проходять, продовжує більш детальне представлення. Цей образ, наданий Широ в коментарі до відповіді Олександра , ілюструє, як складна модель (людина) може бути представлена ​​низкою більш простих фігур:

хітокси

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


Спасибі. Так, якби я насправді робив гру, я просто використав би якийсь існуючий двигун. Але я просто хочу зрозуміти основні ідеї, які реалізовані в заздалегідь зробленому двигуні виявлення зіткнень. На вашій діаграмі вище ви б використовували математику прямокутника, щоб побачити, чи щось торкається БУДЬ-кого з десятків прямокутників, що складають людину. Це основна ідея?
JackOfAll

Ці орієнтовані обмежувальні коробки (3D), а не прямокутники. Але так. Якби я збирався перевірити, чи промінь (який, скажімо, куля) зіткнувся з гравцем, я б випробовував промінь проти цих ящиків - можливо, після першого тестування проти однієї гігантської коробки, що представляє всього персонажа - не проти кожного трикутник сітки візуалізації).

Ідея полягає в тому, що ви можете використовувати приблизний наближення символу, наприклад, орієнтовані обмежувальні поля, показані на зображенні вище, і перевірити, що спочатку потрібно зробити менш дорогий тест на удари, а якщо трапляється зіткнення, то перейдіть на нижчий рівень ЯКЩО НЕОБХІДНО, тестуйте окремі трикутники, що містяться в обмежувальній коробці. Зазвичай може бути декілька різних БВ, що використовуються ієрархічно, при цьому зовнішній є менш точним, але найшвидшим для тестування (сфера, обмежувальний ящик), і свердлити до чогось більш конкретного (k-DOP), а також потенційно бурити ще більше (трикутники )
Кік

4

Виявлення зіткнення базується на геометрії (примітиви, такі як лінія, площини, сфери, коробки, капсули, циліндри).

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

Якщо ви дістанетесь до цього пункту, я б настійно радив скористатися заздалегідь зробленим двигуном виявлення зіткнень, оскільки такий матеріал виходить досить складним, досить швидким.


Як ви робите виявлення зіткнень на фігурах, складених з трикутників?
JackOfAll

@JackOfAll він уже згадував, що у своїй відповіді це, використовуючи геометричні фігури, як правило, i.stack.imgur.com/CAhxn.jpg
dimitris93

@JackOfAll я відредагував свою відповідь; і як каже Широ, якщо у вас є більш складні "предмети" у вашому оточенні (тіла, стільці, машини тощо), то в процесі розвитку ігор вони зазвичай складаються з більш простих примітивів, які пов'язані між собою. Виявлення зіткнень робиться за примітивними фігурами, але фізичне моделювання потім робиться на все тіло.
Vaillancourt

4
Я буквально не намагаюся зробити гру, просто хочу зрозуміти основні ідеї, які реалізовані в заздалегідь зробленому двигуні виявлення зіткнень. Якби я насправді робив гру, я, очевидно, не вигадував би колесо, погодився.
JackOfAll
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.