У меня есть THREE.Scene
с двумя добавленными сетками, 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
по-прежнему имел одно и то же «глобальное» вращение до и после удаления и повторного добавления в сцену?
Спасибо!