Для того чтобы получить вектор направления 3D вьюпорта, например, чтобы определить расположение вьюпорта относительно какого-либо объекта сцены, можно воспользоваться функцией region_2d_to_vector_3d из модуля view3d_utils.
Чтобы получить вектор “взгляда” из вьюпорта при помощи функции region_2d_to_vector_3d в первую очередь нужно определить указатель на рабочую область 3D вьюпорта – area.
Для этого пробежим циклом по открытым рабочим областям, пока не дойдем до рабочей области 3D вьюпорта:
1 2 |
for area in bpy.context.screen.areas: if area.type == 'VIEW_3D': |
В ней нам нужно получить указатель на регион собственно окна вьюпорта. Для его нахождения точно так же пробежим циклом по регионам:
1 2 |
for region in area.regions: if region.type == 'WINDOW': |
Получив указатель на регион окна, мы можем вызвать для него функцию region_2d_to_vector_3d, которая вернет нам нужный вектор направления взгляда:
1 2 3 4 5 6 7 |
viewport_view_direction = view3d_utils.region_2d_to_vector_3d( region, region.data, (region.width / 2.0, region.height / 2.0) ) # <Vector (-0.0000, 1.0000, 0.0000)> |
В параметрах функции мы передаем:
- region – указатель на регион, для которого вызывается проверка
- region.data – указатель на данные этого региона
- центральную точку текущего региона – точку из которой считается направление взгляда
В результате мы получаем нормализованный вектор, направленный из центральной точки 3D вьюпорта вдоль направления взгляда.
Например, для фронтального вида – когда мы смотрим на объект спереди, полученные вектор взгляда будет направлен вдоль оси Y и иметь длину равную 1:
(-0.0000, 1.0000, 0.0000)