我正在尝试创建一个渲染对象360度旋转的脚本。我根本不熟悉搅拌机,但我一直在努力做到这一点。
我正在编写一个使用Python的脚本,它导入一个STL文件并创建它的360渲染。我的问题是,当移动相机时,相机不会在正确的平面上移动。
这是一张描述我的意思的图像专辑:
我用来做这个的功能是:
def rotateCameraAroundOrigin(rx=0):
cam = bpy.data.objects['Camera']
old_x = cam.location.x
old_y = cam.location.y
old_z = cam.location.z
radius = math.sqrt((math.pow(old_x,2) + math.pow(old_y,2)))
current_angle = math.degrees(math.atan2( old_y, old_x))
print("CUR:\t%+04d degrees" % (current_angle))
new_angle = current_angle + rx
print("FROM:\t%+04d, %+04d, %+04d" % (old_x,old_y,old_z))
new_x = radius * math.cos(math.radians(new_angle))
new_y = radius * math.sin(math.radians(new_angle))
moveCamTo(new_x,new_y,old_z)
print("TO:\t%+04d, %+04d, %+04d\n" % (new_x,new_y,old_z))
然后:
for i in range(1, 10):
print("Rotation %01d" % (i))
image = 'images/' + sys.argv[-1] + str(i) + '.' + filetype
rotateCameraAroundOrigin(36)
render_thumb(image,gl=False)
产生imgur相册中显示的输出:
Rotation 1
CUR: +000 degrees
FROM: +302, +000, +000
TO: +244, +177, +000
Rotation 2
CUR: +035 degrees
FROM: +244, +177, +000
TO: +093, +287, +000
Rotation 3
CUR: +071 degrees
FROM: +093, +287, +000
TO: -093, +287, +000
Rotation 4
CUR: +107 degrees
FROM: -093, +287, +000
TO: -244, +177, +000
Rotation 5
CUR: +143 degrees
FROM: -244, +177, +000
TO: -302, +000, +000
Rotation 6
CUR: +179 degrees
FROM: -302, +000, +000
TO: -244, -177, +000
Rotation 7
CUR: -144 degrees
FROM: -244, -177, +000
TO: -093, -287, +000
Rotation 8
CUR: -108 degrees
FROM: -093, -287, +000
TO: +093, -287, +000
Rotation 9
CUR: -072 degrees
FROM: +093, -287, +000
TO: +244, -177, +000
我很茫然。我的飞机是倾斜的,但我不知道为什么。我想围绕物体顺畅地旋转。
感谢您的帮助,
ħ
答案 0 :(得分:2)
为什么不在对象位置创建一个空对象。把相机放到它的父母那里。然后将旋转矩阵应用于空。父母将使相机旋转通过所需的旋转弧。
这种方法更加简单,主要用于速度建模,您希望相机查看整个对象的进度。
def parent_obj_to_camera(b_obj, b_camera):
origin = (0,0,0) #can be replaced with b_obj.location
b_empty = bpy.data.objects.new("Empty", None)
b_empty.location = origin
b_camera.parent = b_empty #setup parenting
scn = bpy.context.scene
scn.objects.link(b_empty)
scn.objects.active = b_empty
b_empty.select = True
然后在那个for循环中你会创建一个矩阵来旋转空
import mathutils
from math import radians
b_empty = bpy.context.scene.active_object
num_steps = 9
stepsize = 360/num_steps
for i in range(0, num_steps):
mat_rot = mathutils.Matrix.Rotation(radians(step), 4, 'X')
b_empty.matrix_local *= mat_rot
print("Rotation %01d" % (radians(stepsize)))
image = 'images/' + sys.argv[-1] + str(i) + '.' + filetype
render_thumb(image,gl=False)
答案 1 :(得分:0)
我在@ neomonkeus的回答中遇到了一些问题。我在他的代码中做了以下更改,它对我有用。
mat_rot=mathutils.Matrix.Rotation(radians(stepsize*(i+1)), 4, 'X')
b_empty.matrix_world = mat_rot
bpy.context.scene.update() # VERY IMPORTANT
别忘了更新场景。