如何在blender 2.5中转换全局坐标到本地坐标?

时间:2011-08-20 13:26:34

标签: python blender

我想使用以下脚本在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 

但是当骨骼有父母并且未连接时该怎么办?

感谢名单

1 个答案:

答案 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