Обнаружение столкновений с использованием AABB или OBB сомнений - PullRequest
5 голосов
/ 25 сентября 2011

Я прочитал кое-что об этом, я хочу сделать некоторую реализацию, используя это. Но у меня есть несколько сомнений. Проблема с AABB заключается в том, что объекты должны быть выровнены по оси, в противном случае вам придется пересчитывать bbox каждый кадр, верно? Это перерасчет дорогой? А как насчет точности, вы можете создать дерево столкновений, разделяющее bbox? Как это работает с AABB?

OBB ориентирован на вращение объекта, верно? Вы должны построить дерево до того, как игра инициализируется. Я понял, что это намного сложнее реализовать и немного дороже, но я получаю много точности. Но что, если объект вращается в игре, будет ли bbox пересчитывать свое вращение «автоматически»?

Какой из них больше всего используется в играх и почему?

Заранее спасибо:)

Ответы [ 2 ]

4 голосов
/ 14 ноября 2011

Выбор между AABB, OBB, сферами, капсулами ... зависит от типа выполняемой вами симуляции и ваших ограничений (обычно приложений реального времени).

Вам необходимо оценить плюсы иминусы и сделайте свой выбор соответственно.Например, тесты с AABB очень быстрые, но вам нужно пересчитать AABB, когда ваш объект вращается.Однако, если вы работаете с очень сложными объектами и имеете дело с BVH , обновление AABB-дерева происходит довольно быстро, поскольку вам нужно только пересчитать ("с нуля") нижние AABB, причем более высокие из них строятся изребенок AABBs.С OBB тесты обходятся дороже, но вам не нужно пересчитывать ваши OBB, если вы имеете дело с жесткими объектами.

Если вы решили использовать деформируемые объекты, дерево AABB (или дерево сфер) определенно является лучшей идеей, поскольку ваше дерево в любом случае нужно будет обновить.

Вопрос в том, что будет дороже, издержки, возникающие в результате обновления AABB-дерева или в результате тестов перекрытия с OBB?Все это зависит от вашего моделирования: сложность объектов, среднее количество тестов CD в секунду и т. Д. Вы можете найти некоторые тесты различных библиотек CD, основанных на различных методах (BVH, сетки ...) с различными формами, протестированных на конкретных задачах. Здесь является примером, который может вас заинтересовать.

Что касается реализации, поскольку все это было исследовано несколько лет назад и реализовано во многих библиотеках, у вас не должно возникнуть никаких проблем.Вы можете взглянуть на Обнаружение столкновений в реальном времени Кристера Эриксона, на все эти вопросы даны ответы и объяснены очень четко.

Вы также можете использовать микс из разных форм, например одиндля широкой фазы и еще одной для узкой фазы (когда вы достигнете листьев), но вам, вероятно, не понадобится что-то подобное.

3 голосов
/ 06 ноября 2011

AFAIK, большинство физических движков использует алгоритм AABBs + Sweep-and-Prune для широкой фазы обнаружения столкновений. Деревья практически бесполезны для обнаружения столкновений между динамическими объектами. Тем не менее, деревья могут быть успешно использованы для статической геометрии

Проблема с AABB заключается в том, что объекты должны быть выровнены по оси, в противном случае вы должны пересчитывать bbox каждый кадр, является ли это право?

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

В целом, пересчет AABB лучше, чем дорогостоящие узкофазные алгоритмы.

...