Видимость объекта во вьюпорте

В ряде случаев бывает необходимо определить, виден ли в данный момент определенный объект в окне 3D вьюпорта в Blender, или – нет. В общем случае определить видимость объекта во вьюпорте можно при помощи функции location_3d_to_region_2d из модуля view3d_utils.

Для начала получим рабочую область вьюпорта, пробежав в цикле по всем открытым в Blender в данный момент рабочим областям:

Для вызова функции location_3d_to_region_2d  нам нужно получить ссылку на 3D регион рабочей области вьюпорта.

Кроме 3D региона, рабочая область сама по себе разбита на несколько отдельных регионов:

  • HEADER – регион заголовка рабочей области, в нем размещается меню
  • TOOL_HEADER – регион инструментов заголовка. Здесь размещаются кнопки выбора режима выделения и меню Options
  • TOOLS – регион с панелью инструментов (Т – панель)
  • UI – регион для интерфейса пользователя (N – панель)
  • HUD – регион для динамических панелей
  • WINDOW – основной регион окна вьюпорта.

Нам нужно получить указатель на регион WINDOW:

Теперь, имея указатели на два типа регионов вьюпорта, мы можем вызвать функцию location_3d_to_region_2d, передав ей в параметрах эти указатели на регионы.

Функция location_3d_to_region_2d проецирует точку из сцены на экран вьюпорта. Иными словами – по координатам точки в трехмерном пространстве сцены функция высчитывает 2d координаты этой точки на экране.

Координаты центральной точки (origin) текущего активного объекта передадим в функцию третьим параметром.

В результате мы получили координаты точки на плоскости вьюпорта.

Теперь мы можем проверить – если точка попадает в границы рабочей области 3D вьюпорта, значит объект виден во вьюпорте, а если выходит за границы – не виден.

Полный код:

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

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии