AABB в игре с подвижными и вращающимися персонажами / объектами / и т. Д. - PullRequest
3 голосов
/ 05 ноября 2010

В те дни я создаю свою самую первую 3d-игру и столкнулся с парой проблем.

Я читал о пересечении AABB и идее построения деревьев из него, но единственное, чтоЯ не мог понять, если мой «персонаж» вращается во время игры, концепция выравнивания по оси не сохраняется!

Я проверил пару библиотек (например, oz-collide, OPCODE).и многое другое), и я видел, что реализации были сделаны для статических объектов, потому что он использует поля без источника (для не статических, все узлы в дереве должны обновляться после каждого движения).

Эти библиотеки должны быть супер-быстрыми, и я, вероятно, где-то ошибся.

Может кто-нибудь помочь мне пролить свет на эту тему?

Ответы [ 2 ]

2 голосов
/ 05 ноября 2010

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

AABB быстр, потому что тест пересечения очень прост, но, как вы уже обнаружили, становится проблематичным, когда необходимы точные пересечения для объектов, не выровненных по осям AABB.

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

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

Вы можете использовать Ориентированную ограничивающую рамку (OBB), когда вам нужны действительно точные пересечения. Это может быть реализовано с помощью теоремы о разделяющей оси . Я вижу, что oz-collide уже поддерживает OBB.

На OBB есть много ресурсов, этот мне помог: GPWiki по теореме о разделяющей оси

Вот реализация .

Вы можете рассчитать AABB из OBB, если вам нужно.

1 голос
/ 02 февраля 2011

OZCollide работает для подвижных объектов и не зависит от времени (нужно просто указать вектор скорости).Это также работает для OBB (не только AABB).

Проверьте онлайн документацию: http://www.tsarevitch.org/ozcollide/docs/ ссылка не работает

...