【问题标题】:Three.js - calculating relative rotationsThree.js - 计算相对旋转
【发布时间】:2019-10-28 09:35:42
【问题描述】:

我有一个 THREE.Scene 添加了两个网格,meshAmeshB,每个网格都以不同的方式旋转。我的目标是从场景中删除 meshB 并将其重新添加为 meshA 的子项,同时保留其全局位置和旋转——换句话说,meshB 的位置和旋转应该在之前出现相同在这段代码之后。

我目前,几乎可以工作的尝试如下:

var globalOffset = new THREE.Vector3().subVectors( meshB.position, meshA.position );
var localOffset = meshA.worldToLocal( meshB.position );

var rotationOffset = meshA.quaternion.clone().inverse();
var rotation = meshB.quaternion.clone().multiply( rotationOffset );

scene.remove(meshB);
meshA.add(meshB);

meshB.position = localOffset;
meshB.rotation.setFromQuaternion(rotation);

定位工作正常;仅当meshAmeshB 都围绕同一轴旋转时,旋转才有效——如果meshAmeshB 围绕不同的轴旋转,meshB 似乎会在此代码之前和之后更改旋转。

我有什么想法可以纠正上面的代码(或一个不同方法的想法),以便meshB 在被删除并重新添加到场景之前和之后仍然具有相同的“全局”旋转?

谢谢!

【问题讨论】:

    标签: javascript rotation three.js scenegraph


    【解决方案1】:

    您想从场景中删除 meshB 并将其重新添加为 meshA 的子级,同时保留其全局位置和旋转。

    你可以这样做:

    meshA.attach( meshB );
    

    three.js r.109

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-29
      • 1970-01-01
      • 2023-04-05
      • 2021-08-23
      • 2013-07-15
      • 2016-01-20
      • 1970-01-01
      • 2013-08-30
      相关资源
      最近更新 更多