THREE.Scene
2 つのメッシュが追加された と がありmeshA
、meshB
それぞれが異なる方法で回転されています。私の目標は、シーンから削除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
場合にのみ機能します。 とが異なる軸を中心に回転している場合、このコードの前後で回転が変化するように見えます。meshB
meshA
meshB
meshB
上記のコード(または別のアプローチのアイデア)を修正しmeshB
て、シーンに削除して再追加する前後に同じ「グローバル」回転を維持する方法はありますか?
ありがとう!