如何将一个实施FPS相机?(How would one implement an FPS camer

2019-08-02 20:01发布

所以,我目前工作的一些FPS游戏编程在OpenGL(JOGL,更具体)只是为了好玩,我想知道什么是创建一个FPS类相机推荐的方法是什么?

目前,我基本都为玩家所面对的方向,这将被添加到时按“W”或前进键当前玩家位置的向量。 该向量的负是用于“s”或后向键当然。 对于“一”,左,和“d”,右我使用正常的方向矢量的。 (我知道,这将让玩家飞,但不是目前的问题)

在移动鼠标时,方向矢量将利用三角学和矩阵来旋转。 所有的载体,当然,标准化,便于速度控制。

这是常见的和/或好办法或者有更简单/更好的办法?

Answer 1:

一直认为事情是这样做的是使用两个角度,偏航和变桨。 鼠标移动的两个轴对应于在这些角度的变化。

可以计算出forward具有球形至直角坐标变换容易载体。 (节距=纬度=φ,偏航=经度=θ)

您可以使用固定up载体(比如(0,0,1)),但是这意味着你不能直视向上或向下。 (大多数游戏允许你看看不超过89.999度陡峭的解决这个问题。)

right向量然后向前和向上向量的叉积。 由于向上矢量总是垂直于所述接地平面它将始终是平行于地面的平面。

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

对于GL的一部分,你可以简单地使用gluLookAt()使用播放器的原点,原点加上forward向量和up向量。

哦,拜托,请添加一个“反转鼠标”选项。

编辑: 这里的一个替代的解决方案,摆脱了89.9问题的,在另外一个问题,这涉及到建立问right第一载体(无间距的信息),然后forwardup



Answer 2:

是的,这就是本质上我一直认为它所做的那样。



Answer 3:

是啊,但最终你会想其他各种属性添加到相机。 要的n00b拼写:保持整洁,如果你想模仿地震或CS。 到底可能具有博饼,FoV的,运动过滤,网络滞后悬挂和更多。

相机实际上是比较困难的部分在一场精彩的比赛,使之一。 这就是为什么开发人员通常是内容有严重呆板,固定的1/3的人同上。



Answer 4:

你可以使用四元数为您的相机旋转。 虽然我还没有尝试过自己,他们是为了避免有用的万向节锁定 。



文章来源: How would one implement an FPS camera?