IT練習ノート

IT関連で調べたこと(実際は嵌ったこと)を書いています。

PythonでBlenderのオブジェクトを操作する(Quaternion)

Quaternionを使ってオブジェクトを回転させます。

Math Types & Utilities (mathutils) — Blender 2.63.7 - API documentation

オブジェクトの移動がわかりやすくなるように目安の円を描きます。

bpy.ops.mesh.primitive_circle_add(location=(0,0,0), radius=4, rotation=(0,0,0))
bpy.ops.mesh.primitive_circle_add(location=(0,0,0), radius=4, rotation=(pi/2,0,0))
bpy.ops.mesh.primitive_circle_add(location=(0,0,0), radius=4, rotation=(pi/2,0,pi/2))

f:id:naotoogawa:20170218110533p:plain

トーラスを描きます。

bpy.ops.mesh.primitive_torus_add(location=(4,0,0), major_radius=0.5)
obj = bpy.context.active_object

f:id:naotoogawa:20170218110543p:plain

Quaternionを使ってトーラスを移動します。

Quaternionのベクトル(虚部)を(0,0,1)にとって、z軸を中心に回転をさせていきます。

obj.location.rotate(Quaternion((cos((pi/16)/2), 0.0, 0.0, sin((pi/16)/2))))
obj.location.rotate(Quaternion((cos((pi/16)/2), 0.0, 0.0, sin((pi/16)/2))))
obj.location.rotate(Quaternion((cos((pi/16)/2), 0.0, 0.0, sin((pi/16)/2))))

円の上にトーラスが乗っていることがわかります。

f:id:naotoogawa:20170218110551p:plain