Blender 2.6 API では、ボーンのアニメーションに PoseBone が使用されます。PoseBone.matrix はそれを行う 1 つの方法です。APIは、PoseBone.matrixが「オブジェクト空間」にあると言います。
PoseBone.matrix は、私がまったく見たことがないものです。アニメーション インポーターがまだ機能しません。PoseBone.matrix との取引は何ですか? Blender 2.4 API では、2 つの行列がありました。1 つはローカル空間に、もう 1 つはアーマチュア空間にありました。
しかし、新しい PoseBone.matrix はそのどちらでもありません! これはローカル マトリックスではありません。
位置はローカルではなく、グローバルです。
しかし回転
<Euler (x=1.5708, y=-0.7854, z=-0.0000), order='XYZ'>
は。
では、API が PoseBone.matrix があると言っているこの「オブジェクト空間」とは何でしょうか?
アーマチュア空間行列を階層アーマチュアに割り当てようとしていますが、正しく取得できません。
「PoseBone.matrix」として設定する前に、親の回転を元に戻し、マトリックスを再構成して、私が持っているマトリックスを分解しようとしました。うまくいきません。
oldmatrix = myMatrix
loc, rot, scale = oldmatrix.decompose()
#rot = rot * pose.bones[bonename].parent.rotation_quaternion.conjugated()
for i in pose.bones[bonename].parent_recursive:
rot = rot * i.conjugated()
newmatrix = rot.to_matrix().to_4x4()
newmatrix[0][3] = loc.x
newmatrix[1][3] = loc.y
newmatrix[2][3] = loc.z
pose.bones[bonename].matrix = newmatrix