我愿意制作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文件可以做到这一点,但重点是让我学习一些基本的几何体。
答案 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
字段给出)。 (已经规范化了!)右向量由矩阵的第一行的前三个元素给出。