<p><strong>编辑</strong>:
我找到了将这些对象空间转换为骨骼局部空间的解决方案。在</p>
<p>长话短说,下面是一个完成该任务的代码片段:</p>
<pre><code> poseBone = C.object.pose.bones[2] # < - set your bone here
# poseBone.matrix is in object space - we need to convert it to local space
if poseBone.parent is not None:
parentRefPoseMtx = poseBone.parent.bone.matrix_local
boneRefPoseMtx = poseBone.bone.matrix_local
parentPoseMtx = poseBone.parent.matrix
bonePoseMtx = poseBone.matrix
boneLocMtx = ( parentRefPoseMtx.inverted() * boneRefPoseMtx ).inverted() * ( parentPoseMtx.inverted() * bonePoseMtx )
else:
boneRefPoseMtx = poseBone.bone.matrix_local
bonePoseMtx = poseBone.matrix
boneLocMtx = boneRefPoseMtx.inverted() * bonePoseMtx
loc, rot, scale = boneLocMtx.decompose()
</code></pre>
<hr/>
<p><strong>我的老问题</strong>:</p>
<p>你找到解决办法了吗?
我在处理同样的问题。在</p>
<p>对象空间矩阵应该是相对于父对象空间矩阵表示的骨骼局部空间矩阵,因此:</p>
<p>boneOS=parentOS*boneLS</p>
<p>但正如你所注意到的-它没有给出正确的解决方案。骨骼仍然偏移。
我想到的一件事是,它被静止姿势变换抵消了,所以我试着把它向后滚动,但那也没用,但也许我用的方程是错的。在</p>
<p>下面是我如何计算姿势骨骼的局部空间变换(假设骨骼1是我感兴趣的骨骼,骨骼0是其父骨骼,而0没有父骨骼):</p>
^{pr2}$