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

StackOverflow https://stackoverflow.com/questions/4102602

  •  29-09-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

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

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

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

Есть много ресурсов на OBB, этот помог мне:GPWiki на разделении теоремы оси

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

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

Другие советы

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top