Three.js - 计算相对旋转

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Three.js - 计算相对旋转相关的知识,希望对你有一定的参考价值。

我有一个加上两个网格的THREE.ScenemeshAmeshB,每个都以不同的方式旋转。我的目标是从场景中移除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在删除和重新添加到场景之前和之后仍然具有相同的“全局”轮换?

谢谢!

答案

有三个.js工具可用于这样做:

THREE.SceneUtils.detach( child, parent, scene ); // remove child from parent and add to scene

THREE.SceneUtils.attach( child, scene, parent ); // remove child from scene and add to parent

全球方向没有变化。

要使用这些方法,必须将文件/examples/js/utils/SceneUtils.js添加到项目中。

three.js r.96

以上是关于Three.js - 计算相对旋转的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 飞机的 3D 旋转

Three.js里如何让一个球体相对y轴偏转23°26'旋转(即地球的旋转)?

Three.JS 的单位,计算旋转和轨道速度

three.js 路径导航

THREE.js:计算物体上一点的世界空间位置

在 THREE.js 中获取鼠标相对于 3D 空间的坐标