Почему я все еще получаю блокировку карданного подвеса в файле THREE.js со следующим кодом, который использует кватернионы?

Я пытаюсь заставить камеру вращаться вокруг произвольной оси в мировом пространстве. Я уже столько часов пытался решить эту проблему без удачи. Я не хочу добавлять такую ​​библиотеку, как THREE.OrbitControls, просто чтобы иметь эту функцию. Может кто-нибудь сказать мне, что я делаю неправильно в следующем коде?

Camera.prototype.orbit = function(axis, spd, pt) {
    var axis = axis.normalize(),
        currCamQuaternion = new THREE.Quaternion(this.position.x, this.position.y, this.position.z, 0),
        rotQuaternion = new THREE.Quaternion();

    rotQuaternion.setFromAxisAngle(axis, spd);
    var halfCamQuaternion = rotQuaternion.clone().multiply(currCamQuaternion),
        fullCamQuaternion = halfCamQuaternion.clone().multiply(rotQuaternion.clone().conjugate());

    this.position.copy(new THREE.Vector3(fullCamQuaternion.x, fullCamQuaternion.y, fullCamQuaternion.z));
    this.lookAt(pt);
}

0 ответов

Другие вопросы по тегам