这个矩阵在什么空间?

5 python animation space matrix blender

在Blender 2.6 API中,PoseBone用于动画骨骼.PoseBone.matrix是一种方法.API称PoseBone.matrix位于"对象空间"中.

http://www.blender.org/documentation/blender_python_api_2_63_5/bpy.types.PoseBone.html#bpy.types.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)