0

THREE.Scene2 つのメッシュが追加された と があり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