0

我有一个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);

定位工作正常;仅当两者都围绕同一轴旋转时,旋转才有效——如果并且已经meshA围绕不同的轴旋转,则在此代码之前和之后似乎会改变旋转。meshBmeshAmeshBmeshB

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

谢谢!

4

1 回答 1

2

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

你可以这样做:

meshA.attach( meshB );

三.js r.109

于 2014-04-11T04:31:19.333 回答