Khi bạn đã đặt quyền 'view', bạn có thể sửa đổi:
view.spaces[0].region_3d.view_matrix
view.spaces[0].region_3d.view_rotation
Lưu ý rằng region_3d.view_location là mục tiêu 'look_at', không phải là vị trí của máy ảnh; bạn phải sửa đổi view_matrix trực tiếp nếu bạn muốn di chuyển vị trí của máy ảnh (theo như tôi biết), nhưng bạn có thể tinh chỉnh điều chỉnh xoay bằng cách sử dụng view_rotation khá dễ dàng. Có thể bạn sẽ cần phải đọc này để tạo ra một quaternion hợp lệ mặc dù: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation
Có lẽ một cái gì đó như thế này có thể hữu ích:
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
Phiên bản nào của Máy xay sinh tố? – Blender
Còn về ['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
xem thêm http://blender.stackexchange.com/a/678/2762 –