将矩阵变换应用于SkinnedMesh后更新骨骼坐标

时间:2017-07-16 11:34:04

标签: matrix three.js

我的蒙皮网格和骨架有问题。 假设我有一个SkinnedMesh,我想缩放或旋转,但我需要"烘烤"网格几何上的这些变换(使用带有由缩放,平移和四元数组成的矩阵的applyMatrix)。如果我烘焙这些变换,蒙皮网格的骨架不会更新,因此骨骼保持其初始大小和坐标。

我需要烘焙转换,以便将比例重置为THREE.Vector3(1,1,1)并旋转到THREE.Euler(0,0,0," XYZ")。

如果我尝试移动骨骼位置或在转换后烘烤我的SkinnedMesh(显然)更改后缩放/旋转它们。

我拍了两张截图来展示我的意思。 在第一个屏幕截图(自然比例)中,您将看到蒙皮网格在其自然比例下,骨架帮助器正确显示。在第二个屏幕截图(更大的比例)中,我烘焙了一个比例变换,用THREE.Vector3(3,3,3)进行缩放。正如您所看到的那样,骨架助手仍保持其初始大小。

可以在不影响几何体的情况下更新骨骼大小和坐标吗?有人能帮助我吗?

提前谢谢!

自然规模

natural scale (1,1,1)

规模更大

bigger scale (3,3,3)

1 个答案:

答案 0 :(得分:0)

我成功尝试了以下内容:

var p = new THREE.Vector3();
var q = new THREE.Quaternion();
var s = new THREE.Vector3();
mesh.skeleton.findBoneByName("bone-name").matrixWorld.decompose(p, q, s);

//p variable now contains the world position
console.log(p);

mesh是您的SkinnedMesh个实例。 "bone-name"是您要查找世界位置的骨骼的名称。