6
A
回答
6
首先,请注意,您可以打开多个3D视图一次,每个人都可以有自己的视的角度,透视/邻设置等,所以你的脚本将有寻找所有可能存在的3D视图(可能不存在)并决定它将影响哪一个视图。
以bpy.data对象开始,该对象具有window_managers属性。这个集合似乎总是只有一个元素。但是,可能会有一个或多个开放的windows。每个窗口有一个screen,分为一个或多个areas。因此,您需要搜索“VIEW_3D”空间为type的所有区域。然后通过该区域的spaces寻找类型为“VIEW_3D”的那一个。这样的空间将是子类SpaceView3D。这将有一个region_3d属性类型RegionView3D。最后,这个对象又具有一个名为view_matrix的属性,它取值为您可以获取或设置的类型Matrix。
明白了吗? :)
4
一旦你找到正确的“视图”,您可以修改:
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
相关问题
- 1. 原始搅拌机出口商搅拌机python脚本
- 2. 搅拌机出口到Three.js
- 3. 搅拌机出口THREE.js
- 4. 搅拌机
- 5. 在搅拌机
- 6. 用搅拌机,并出口到统一
- 7. 编译/链接搅拌机的窗口
- 8. 在搅拌机中运行python脚本
- 9. 搅拌机和itunes
- 10. 使用搅拌机更换材料颜色python
- 11. 使用python旋转相机在搅拌机中
- 12. 搅拌机游戏引擎的Python
- 13. 的Python:连接搅拌机与WinTracker 2
- 14. 搅拌机对象进口商
- 15. 搅拌机2.6.1出口食人魔
- 16. 搅拌机2.6控制台在窗口
- 17. 搅拌机:出口到微光?
- 18. 搅拌机:缩放窗口和按钮
- 19. THREE.ShaderMaterial的JSON从搅拌机
- 20. python搅拌机游戏引擎事件
- 21. 搅拌机,UV层,图像和Python
- 22. 从python脚本运行搅拌机
- 23. 如何更改搅拌机脚本中形状键的值?
- 24. 搅拌器的Python错误
- 25. three.js所从搅拌机
- 26. 访问搅拌机对象
- 27. 我要导入搅拌机
- 28. 搅拌机导入three.js库
- 29. 如何在搅拌机
- 30. 纹理搅拌机2.57
搅拌机的哪个版本? – Blender 2012-01-27 03:12:41
['bpy.ops.view3d.viewnumpad'](http://www.blender.org/documentation/blender_python_api_2_69_0/bpy.ops.view3d.html?highlight=numpad#bpy.ops.view3d.viewnumpad)? – gandalf3 2013-10-21 01:50:58
另请参阅http://blender.stackexchange.com/a/678/2762 – 2014-03-12 13:48:33