Three.js - 计算相对旋转

时间:2014-04-11 03:32:50

标签: javascript rotation three.js scenegraph

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

我目前几乎正在努力的尝试如下:

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); meshA围绕同一轴旋转时才有效 - 如果meshBmeshA围绕不同的轴旋转,meshB似乎在此代码之前和之后更改了旋转。

任何想法如何纠正上面的代码(或不同方法的想法),以便meshB在删除并重新添加到场景之前和之后仍然具有相同的“全局”轮换?< / p>

谢谢!

1 个答案:

答案 0 :(得分:2)

有三种工具可供选择:

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

相关问题