Girar objeto alrededor del eje mundial
Estoy tratando de rotar un objeto alrededor del eje mundial. He encontrado esta pregunta:¿Cómo rotar un objeto en el eje world three.js?
Pero no resolvió el problema usando esta función:
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
ygetRotationFromMatrix
no están definidos (me sale un error de consola). ¿Como solucionar el problema?
Actualizar
Traté de usarQuaternion
, pero no parece comportarse correctamente. Estoy tratando de rotar un objeto de acuerdo con el clic del usuario, esta es la función que he escrito:
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);
}
Gira correctamente siempre que el objeto se encuentre en posición vertical u horizontal, pero si está a 45 grados del eje x, gira muy lentamente y en la dirección opuesta al clic.