我使用 Blender3D,但答案可能不是 API 专有的。
我有一些矩阵需要分配给 PoseBones。当没有骨骼层次(父子关系)时,生成的姿势看起来很好,而当有骨骼层次时,姿势看起来很乱。
我在这里上传了一个包含装配模型、文本动画导入器和测试动画文件的示例混合的存档:
http
:
//www.2shared.com/file/5qUjmnIs/sample_files.html 通过选择一个骨架并运行来导入动画“sba”文件的进口商。对两个骨架执行此操作。
这就是我在真实(复杂)导入器中分配姿势的方式:
matrix_bases = ... # matrix from file
animation_matrix = matrix_basis * pose.bones['mybone'].matrix.copy()
pose.bones[bonename].matrix = animation_matrix
如果我进入编辑模式,选择所有骨骼并按 Alt+P 撤消育儿,姿势看起来又很好了。
API 文档说 PoseBone.matrix 位于“对象空间”中,但从这些测试中我似乎很清楚它们与父骨骼相关。
应用约束和驱动程序后的最终 4x4 矩阵(对象 空间)
我试着做这样的事情:
matrix_basis = ... # matrix from file
animation_matrix = matrix_basis * (pose.bones['mybone'].matrix.copy() * pose.bones[bonename].bone.parent.matrix_local.copy().inverted())
pose.bones[bonename].matrix = animation_matrix
但看起来更糟。尝试了操作顺序,没有运气。
作为记录,在旧的 2.4 API 中,这就像一个魅力:
matrix_basis = ... # matrix from file
animation_matrix = armature.bones['mybone'].matrix['ARMATURESPACE'].copy() * matrix_basis
pose.bones[bonename].poseMatrix = animation_matrix
pose.update()
链接到 Blender API 参考: