Rodar o objeto ao redor do eixo do mundo
Eu estou tentando girar um objeto ao redor do eixo do mundo. Eu encontrei esta pergunta:Como rodar um objeto no axis world three.js?
Mas isso não resolveu o problema usando esta função:
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
egetRotationFromMatrix
não estão definidos (estou recebendo um erro de console). Como resolver o problema?
Atualizar
Eu tentei usarQuaternion
, mas não parece se comportar corretamente. Eu estou tentando girar um objeto de acordo com o clique do usuário, esta é a função que eu escrevi:
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);
}
Ele gira corretamente desde que o objeto esteja na posição vertical ou horizontal, mas se estiver, por exemplo, a 45 graus do eixo x, ele gira muito lentamente e na direção oposta do clique.