【问题标题】:Update bones coordinates after apply matrix transformation to SkinnedMesh将矩阵变换应用于 SkinnedMesh 后更新骨骼坐标
【发布时间】:2017-12-21 00:53:21
【问题描述】:

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

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

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

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

是否可以在不影响几何形状的情况下更新骨骼大小和坐标?有人可以帮帮我吗?

提前谢谢你!

自然比例

更大的规模

【问题讨论】:

    标签: matrix three.js


    【解决方案1】:

    我已经成功地尝试了以下方法:

    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" 是您要查找世界位置的骨骼的名称。

    【讨论】:

      猜你喜欢
      • 2015-07-21
      • 1970-01-01
      • 2017-05-05
      • 2020-09-27
      • 2013-02-12
      • 2017-04-10
      • 1970-01-01
      • 2012-02-08
      • 1970-01-01
      相关资源
      最近更新 更多