Three.js旋转相机和更新控件(可能的万向锁?)

时间:2016-12-06 17:44:15

标签: javascript vector camera three.js rotation

我使用指针锁控件使用three.js。我将其设置为在调用函数时更改相机的旋转。但是,正因为如此,相机才开始自行旋转。

而不是旋转整个相机和控制方案,它似乎只是旋转相机,所以如果你按W向前移动,你实际上是在不同的方向移动。这就像是用头走到一边,而不是移动你的整个身体。

有什么方法可以解决这个问题吗?

camera.lookAt(new THREE.Vector3(50, 0, 0));

上面的代码就是我用它来查看一个向量(可以用camera.lookAt(objectnamehere.position)替换它。

// Camera
// -------
camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 1, 1000);

// Controls
// --------
controls = new THREE.PointerLockControls(camera);
scene.add(controls.getObject());
//camera.lookAt(new THREE.Vector3(50, 0, 0));

var onKeyDown = function(event) {

    switch (event.keyCode) {

        case 38: // up
        case 87: // w
            moveForward = true;
            break;

        case 37: // left
        case 65: // a
            moveLeft = true;
            break;

        case 40: // down
        case 83: // s
            moveBackward = true;
            break;

        case 39: // right
        case 68: // d
            moveRight = true;
            break;
    }

};

var onKeyUp = function(event) {

    switch (event.keyCode) {

        case 38: // up
        case 87: // w
            moveForward = false;
            break;

        case 37: // left
        case 65: // a
            moveLeft = false;
            break;

        case 40: // down
        case 83: // s
            moveBackward = false;
            break;

        case 39: // right
        case 68: // d
            moveRight = false;
            break;

    }

};

document.addEventListener('keydown', onKeyDown, false);
document.addEventListener('keyup', onKeyUp, false);

上面的代码为three.js指针锁控件设置了摄像头和控制系统。

有什么想法吗?谢谢。

1 个答案:

答案 0 :(得分:0)

PointerLockControls期待未旋转的相机。摄像机视图方向由控件创建的摄像机父对象控制。

您可以使用

controls.getObject.rotation.y = value; // radians

更改相机标题,

controls.getObject().children[ 0 ].rotation.x = value; // radians

更改相机间距。

拥有controls.lookAt( v )方法可能会很棒。如果需要,您可以在three.js github网站上提交增强请求。

three.js r.82