代码之家  ›  专栏  ›  技术社区  ›  vladek

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

  •  1
  • vladek  · 技术社区  · 6 年前

    我愿意制作FPS“飞行模式”三。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);
        }
    

    对于前进和后退,代码工作正常。对于左右向量,我认为是摄影机。up开始起作用,但我不知道怎么做。如果您提供代码,请详细解释一切(几何)。提前感谢您的帮助。

    附笔。: 我知道已经有三个了。js文件可以做到这一点,但关键是我要学习一些基本的几何图形。

    1 回复  |  直到 6 年前
        1
  •  2
  •   meowgoesthedog    6 年前

    右向量 R 向量叉积 世界的方向( W )和上方向向量( U ):

    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 字段)。The( 也已经正常化了! )右向量由 第一 矩阵的行。