Пересечение двух AABB

Одним из самых простых методов предварительной проверки пересекаются ли два объекта в пространстве, является проверка по ограничивающим объектам, в частности по AABB (Axis Aligned Bounding Box).

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

Рассмотрим проверку пересечений для двух параллелограммов. AABB для параллелограмма совпадает с его фактической формой, что дает нам возможность наглядно отслеживать их пересечения.

Добавим в сцену два куба и немного изменим их размеры, чтобы они превратились в параллелограммы. Мы можем обращаться к ним через указатель в bpy.data:

Переведем координаты их точек в глобальную систему координат, чтобы учесть смещения и трансформации объектов:

И рассчитаем для каждого из них AABB при помощи функции _aabb().

Определим функцию, которая будет проверять два AABB на пересечение.

Наша функция будет возвращать True, если есть пересечение между двумя переданными в параметрах AABB, или False, если пересечения между переданными в параметрах AABB нет.

Теперь мы можем проверить, пересекаются ли AABB для наших объектов в сцене:

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

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Межтекстовые Отзывы
Посмотреть все комментарии