Objekt um die Weltachse drehen
Ich versuche ein Objekt um die Weltachse zu drehen. Ich habe diese Frage gefunden:Wie rotiere ich ein Objekt um die Achse world three.js?
Mit dieser Funktion konnte das Problem jedoch nicht gelöst werden:
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
undgetRotationFromMatrix
sind nicht definiert (ich erhalte einen Konsolenfehler). Wie kann das Problem behoben werden?
Aktualisieren
Ich habe versucht zu verwendenQuaternion
, aber es scheint sich nicht richtig zu verhalten. Ich versuche, ein Objekt entsprechend dem Klick des Benutzers zu drehen. Dies ist die Funktion, die ich geschrieben habe:
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);
}
Solange sich das Objekt in vertikaler oder horizontaler Position befindet, dreht es sich korrekt. Wenn es sich jedoch beispielsweise um 45 Grad von der x-Achse entfernt befindet, dreht es sich sehr langsam und in die entgegengesetzte Richtung des Klicks.