"Track to"で回転した物体の回転量を得る[obsolute]

(2.74で確認)

(画像をクリックしてアニメーションGIFを開きます)

"Track to"コンストレインツでターゲットに向かせたオブジェクトについて、画面上では回転しているのに、オブジェクト自身の回転の値はゼロ、という表示で、どうやったら「実際に回転している量を取得できるか?」がよくわかりません。

3Dビューのプロパティシェルフで確認できるオブジェクトの回転量は .rotation_euler プロパティで取得できます。ここで「回転していない」ことがわかります。

>>> bpy.data.objects["Cube"].rotation_euler Euler((0.0, 0.0, 0.0), 'XYZ')

また、ワールド座標の回転量は matrix_world で取得できます。

が、出力される行列そのままでは使えません。

>>> bpy.data.objects["Cube"].matrix_world Matrix(((-0.015014098957180977, -0.8195576667785645, 0.5727999210357666, 0.0), (0.9998873472213745, -0.012306305579841137, 0.008601043373346329, 0.0), (-4.656613428188905e-10, 0.5728645324707031, 0.8196500539779663, 0.0), (0.0, 0.0, 0.0, 1.0)))

そこで、オイラー角に変換します。

>>> bpy.data.objects["Cube"].matrix_world.to_euler() Euler((0.6099963784217834, 4.656612873077393e-10, 1.5858110189437866), 'XYZ')

ここで取得できる回転量の数値はラジアンなので、度数を求めたい場合にはここからさらに変換します。

x、y、z軸方向について以下で取得できます。

>>> bpy.data.objects["Cube"].matrix_world.to_euler().x * 180 / pi 34.950218001833235 >>> bpy.data.objects["Cube"].matrix_world.to_euler().y * 180 / pi 2.668042644536231e-08 >>> bpy.data.objects["Cube"].matrix_world.to_euler().z * 180 / pi 90.86027849081961

取得できる座標系

インタラクティブコンソールで以下のように”〜matrix_”まで入力した状態で[Ctrl]+[Space]を押してみてください。他の座標系の値の取得ができそうです。

>>> bpy.data.objects["Cube"].matrix_

basis

local

parent_inverse

world

[EOF]