Повернуть объект вокруг мировой оси
Я пытаюсь вращать объект вокруг мировой оси. Я нашел этот вопрос:Как повернуть объект на оси мира three.js?
Но это не решило проблему с помощью этой функции:
var rotWorldMatrix;
// Rotate an object around an arbitrary axis in world space
function rotateAroundWorldAxis(object, axis, radians) {
rotWorldMatrix = new THREE.Matrix4();
rotWorldMatrix.makeRotationAxis(axis.normalize(), radians);
rotWorldMatrix.multiplySelf(object.matrix); // pre-multiply
object.matrix = rotWorldMatrix;
object.rotation.getRotationFromMatrix(object.matrix, object.scale);
}
multiplySelf
а такжеgetRotationFromMatrix
не определены (я получаю ошибку консоли). Как решить проблему?
Обновить
Я пытался использоватьQuaternion
, но, похоже, он не ведет себя правильно. Я пытаюсь повернуть объект в соответствии с кликом пользователя, это функция, которую я написал:
function mouseUp(event) {
var x= event.clientX;
var y= event.clientY;
var dx= (x - xBegin);
var dy= (y - yBegin);
var quaternion= new THREE.Quaternion();
quaternion.setFromAxisAngle(new THREE.Quaternion(dy,dx,0).normalize(),Math.sqrt(dx*dx+dy*dy)/250.0);
object.quaternion.multiplyQuaternions(quaternion,object.quaternion);
}
Он вращается правильно, пока объект находится в вертикальном или горизонтальном положении, но если он находится, например, под углом 45 градусов от оси x, он вращается очень медленно и в противоположном направлении от щелчка.