2011-08-20 84 views
1

我想在攪拌機2.5移動骨下面的腳本如何在攪拌機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

幾周前,寫訪問PoseBose.matrix(骨的電樞空間矩陣)被授予了Python API。如果您使用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添加並且將整個事物轉化爲考慮對象的全局矩陣。

有關操作骨骼的很好的代碼示例,請查看我的用於Motion Capture的Blender Addon,Here,位於retargetEndUser中的函數bakeTransform中。

相關問題