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

В ряде случаев бывает необходимо определить, виден ли в данный момент определенный объект в окне 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 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии