旋转时如何更新相机向上矢量?

时间:2018-01-05 17:12:05

标签: vector three.js camera rotation geometry

我愿意制作FPS“飞行模式”THREE.js应用程序(无论何时移动鼠标,都会修改相机偏航和俯仰角度)。我也希望它有WASD控件,A和D分别用于左右扫描。到目前为止,这是我的代码:

onkeydown(event) {
        var distance = 1.1;
        var v;

        const vecFront = this.camera.getWorldDirection();

        switch (event.key) {
            case "w":
                v = vecFront.multiplyScalar(distance);
                break;

            case "s":
                v = vecFront.multiplyScalar(-distance);
                break;

            case "a":
                // don't know
                break;

            case "d":
                // don't know
                break;
        }

        this.camera.position.add(v);
    }

对于前进和后退,代码工作正常。对于左右向量,我认为camera.up发挥作用,但我不知道如何。如果您提供代码,请详细解释所有内容(几何)。预先感谢您的帮助。

P.S。:我知道已经有一些THREE.js文件可以做到这一点,但重点是让我学习一些基本的几何体。

1 个答案:

答案 0 :(得分:1)

右向量R由世界方向(W)和向上向量(U)的向量叉积给出:< / p>

R = (W.y * U.z - W.z * U.y, W.z * U.x - W.x * U.z, W.x * U.y - W.y * U.x)

请记住在使用它之前对此向量进行标准化。

但是,有一种更有效的方法,使用相机的视图矩阵(由matrixWorldInverse字段给出)。 (已经规范化了!)右向量由矩阵的第一行的前三个元素给出。