Three.js相机转向右侧

时间:2014-06-24 07:14:03

标签: javascript camera rotation three.js

在Three.js中,我试图实现一个轨道相机可以绕x和y轴旋转。我正在使用这两个函数:

    function rotateX(rot) {
        var x = camera.position.x,
            y = camera.position.y,
            z = camera.position.z;

        camera.position.x = x * Math.cos(rot) + z * Math.sin(rot);
        camera.position.z = z * Math.cos(rot) - x * Math.sin(rot);

        camera.lookAt(scene.position);
    }

    function rotateY(rot) {
        var x = camera.position.x,
            y = camera.position.y,
            z = camera.position.z;

        camera.position.z = z * Math.cos(rot) + y * Math.sin(rot);
        camera.position.y = y * Math.cos(rot) - z * Math.sin(rot);

        camera.lookAt(scene.position);     
    }

现在x旋转工作正常,但y旋转没有。一旦我越过模型的顶部,因为相机的z位置变为负值,然后突然lookAt方法在Z轴上以PI量旋转相机,并且突然模型的左侧在右侧,反之亦然。现在我可以通过检查负Z来解决这个问题,然后只修复相机的旋转,但这会在同时使用x ad y旋转时导致故障,然后x会突然出现这种反转行为。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:1)

您遇到的问题称为Gimbal lock。您需要使用四元数来解决它。你可以在这里阅读https://gamedev.stackexchange.com/questions/45292/how-is-the-gimbal-locked-problem-solved-using-accumulative-matrix-transformation