如何实现FPS相机?

Mar*_*ler 12 java opengl math jogl

所以我目前正在开发OpenGL中的一些FPS游戏编程(JOGL,更具体地说)只是为了好玩,我想知道创建类似FPS的摄像机的推荐方法是什么?

目前我基本上有一个玩家面向方向的矢量,按下"w"或前进键后,它将被添加到当前玩家位置.该向量的负数当然用于"s"或后向键.对于"a",left和"d",右边我使用方向向量的法线.(我知道这会让玩家飞起来,但目前这不是问题)

移动鼠标后,将使用三角学和矩阵旋转方向向量.当然,所有矢量都被标准化以便于速度控制.

这是常见的和/或好的方式还是有更简单/更好的方法?

aib*_*aib 6

一直看到它的方式是使用两个角度,偏航和俯仰.鼠标移动的两个轴对应于这些角度的变化.

您可以forward使用球面到直角坐标转换轻松计算矢量.(pitch = latitude =φ,yaw = longitude =θ)

您可以使用固定up向量(例如(0,0,1)),但这意味着您无法直接向上或向下查看.(大多数游戏通过让你看起来不比89.999度更陡峭来解决这个问题.)

然后,right向量是向前和向上向量的叉积.它始终与地平面平行,因为向上矢量始终垂直于地平面.

左/右strafe键然后使用+/-right向量.对于forward平行于地平面的矢量,您可以采用矢量rightup矢量的叉积.

至于GL部分,你可以简单地使用gluLookAt()玩家的原点,原点加上forward矢量和up矢量.

哦,请,请添加"反转鼠标"选项.

编辑:是一个解决89.9问题的替代解决方案,在另一个问题中提出,其中涉及right首先构建向量(没有音高信息)然后forwardup.