0
我有一个THREE.Scene
添加了两个网格,meshA
和meshB
,其中每个都以不同的方式旋转。我的目标是从场景中删除meshB
,并将其重新添加为meshA
的子项,同时保留其全局位置和旋转 - 换句话说,meshB
的位置和旋转在该代码之前和之后应该看起来相同。Three.js - 计算相对旋转
我现在,几乎工作尝试如下:
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
和meshB
围绕同一个轴旋转时,旋转才起作用 - 如果meshA
和meshB
已围绕不同的轴旋转,meshB
在此代码之前和之后似乎会改变旋转角度。
任何想法,我可以如何纠正上面的代码(或不同的方法的想法),使meshB
仍然具有相同的“全局”旋转之前和之后被删除和重新添加到场景?
谢谢!