5 python animation space matrix blender
在Blender 2.6 API中,PoseBone用于动画骨骼.PoseBone.matrix是一种方法.API称PoseBone.matrix位于"对象空间"中.
PoseBone.matrix完全不是我见过的.我仍然无法让我的动画导入器工作.和PoseBone.matrix有什么关系?在Blender 2.4 API中有两个矩阵:一个在局部空间,一个在电枢空间.
但新的PoseBone.matrix既不是!它不是一个局部矩阵:

位置不是本地的,它是全球性的.
但轮换

<Euler (x=1.5708, y=-0.7854, z=-0.0000), order='XYZ'>
Run Code Online (Sandbox Code Playgroud)
是.
那么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
Run Code Online (Sandbox Code Playgroud)
小智 0
矩阵位于对象空间中,它的行为应该像您期望的代码一样。发生的情况是骨骼矩阵在更改矩阵后没有立即更新。到目前为止,我已经找到了一种黑客解决方案,可以在每根骨头之后更新整个场景
bpy.context.scene.update()
Run Code Online (Sandbox Code Playgroud)