繁体   English   中英

使用Python在blender中更改视口角度

[英]Change viewport angle in blender using Python

我试图找出是否有办法使用Python在blender中更改视口角度。 我想要一个结果,就像你在数字上按1,3或7一样。 垫。

感谢您的任何帮助

首先,请注意,您可以同时打开多个3D视图,每个视图都可以拥有自己的视口角度,透视/正交设置等。因此,您的脚本必须查找可能存在的所有3D视图(可能没有)并决定它将影响哪一个。

bpy.data对象开始,该对象具有window_managers属性。 这个集合似乎总是只有一个元素。 但是,可能有一个或多个打开的窗口 每个窗口都有一个屏幕 ,分为一个或多个区域 因此,您需要在所有区域中搜索空间类型为“VIEW_3D”的区域。 然后通过这个区域的空间寻找类型为“VIEW_3D”的空间。 这样的空间将是SpaceView3D的子类。 这将有region_3d类型的属性RegionView3D 最后,该对象又具有一个名为view_matrix的属性,该属性采用您可以获取或设置的Matrix类型的值。

得到了那一切? :)

找到正确的“视图”后,您可以修改:

view.spaces[0].region_3d.view_matrix
view.spaces[0].region_3d.view_rotation

请注意,region_3d.view_location是'look_at'目标,而不是摄像机的位置; 如果你想移动相机的位置(据我所知),你必须直接修改view_matrix,但你可以很容易地使用view_rotation巧妙地调整旋转。 您可能需要阅读此内容以生成有效的四元数: http//en.wikipedia.org/wiki/Quaternions_and_spatial_rotation

也许这样的事情可能有用:

class Utils(object):

  def __init__(self, context):
    self.context = context

  @property
  def views(self):
    """ Returns the set of 3D views.
    """
    rtn = []
    for a in self.context.window.screen.areas:
      if a.type == 'VIEW_3D':
        rtn.append(a)
    return rtn

  def camera(self, view):
    """ Return position, rotation data about a given view for the first space attached to it """
    look_at = view.spaces[0].region_3d.view_location
    matrix = view.spaces[0].region_3d.view_matrix
    camera_pos = self.camera_position(matrix)
    rotation = view.spaces[0].region_3d.view_rotation
    return look_at, camera_pos, rotation

  def camera_position(self, matrix):
    """ From 4x4 matrix, calculate camera location """
    t = (matrix[0][3], matrix[1][3], matrix[2][3])
    r = (
      (matrix[0][0], matrix[0][1], matrix[0][2]),
      (matrix[1][0], matrix[1][1], matrix[1][2]),
      (matrix[2][0], matrix[2][1], matrix[2][2])
    )
    rp = (
      (-r[0][0], -r[1][0], -r[2][0]),
      (-r[0][1], -r[1][1], -r[2][1]),
      (-r[0][2], -r[1][2], -r[2][2])
    )
    output = (
      rp[0][0] * t[0] + rp[0][1] * t[1] + rp[0][2] * t[2],
      rp[1][0] * t[0] + rp[1][1] * t[1] + rp[1][2] * t[2],
      rp[2][0] * t[0] + rp[2][1] * t[1] + rp[2][2] * t[2],
    )
    return output

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM