Я думаю, что вы проделали долгий путь.Свойство matrixWorld
вашего объекта должно содержать окончательные мировые значения, включая положение, вращение и масштаб.Вы можете получить компонент вращения двумя различными способами:
в виде матрицы:
var rotationMatrix = new THREE.Matrix4().extractRotation(yourObject.matrixWorld);
// rotationMatrix will now contains the rotation component of your object's world matrix
в качестве кватерниона:
var position = new THREE.Vector3();
var quaternion = new THREE.Quaternion();
var scale = new THREE.Vector3();
yourObject.matrixWorld.decompose(position, quaternion, scale);
// quaternion now contains your object's world rotation as a quaternion
Применить к восходящему вектору:
Затем вы можете обновить повышающий вектор в зависимости от используемого вами метода:
var up1 = new THREE.Vector3(0, 1, 0).applyMatrix4(rotationMatrix).normalize();
или
var up2 = new THREE.Vector3(0, 1, 0).applyQuaternion(quaternion).normalize();
Если вы попробуете оба пути, вы увидите, что они достигают одного и того же результата (в пределах разумного для JavaScript).
Если у вас есть вопросы или я неправильно понял ваш вопрос, оставьтекомментарий.