我想使用以下脚本在Blender 2.5中移动骨骼
bpy.context.object.pose.bones['hand_ik.L'].location=(X1,Y1,Z1)
但我有全局(X2,Y2,Z2)。如何将X2,Y2,Z2(带矩阵操作)转换为相应的X1,Y1,Z1
我希望实现与
相同的运动bpy.ops.transform.translate(value=(X2,Y2,Z2),const raint_orientation='GLOBAL')
我发现使用以下代码我可以移动无父骨骼
ob = bpy.context.object
globalVector = Vector((1.0, 0.0, 0.0))
mw = bpy.data.armatures['Armature'].bones['hand_IK.R'].matrix.copy()
bpy.context.object.pose.bones['hand_IK.R'].location = mw.inverted()*globalVector
但是当骨骼有父母并且未连接时该怎么办?
感谢名单
答案 0 :(得分:1)
几个星期前,对python API授予了对PoseBose.matrix(骨骼的Armature-Space矩阵)的写访问权限。如果您使用的是2.59或最新的主干,则可以使用以下代码:
from mathutils import Matrix
ob = bpy.context.object
globalVector = Vector((1.0, 0.0, 0.0))
mw = bpy.data.armatures['Armature'].bones['hand_IK.R'].matrix.copy()
obGlobal = ob.matrix_world
bpy.context.object.pose.bones['hand_IK.R'].matrix = ob.matrix_world.inverted()*(Matrix.Translation(globalVector)+mw.to_3x3().to_4x4())
转换为维度3然后返回4清除原始翻译,然后添加你的globalVector并反转整个事物以获取对象的全局矩阵。
有关操纵骨骼的良好代码示例,请在retargetEndUser中的函数bakeTransform中查看我的Blender Addon for Motion Capture Here。