java – 如何实现FPS摄像头?

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

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

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

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

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

您可以使用球形到矩形坐标变换轻松计算向前矢量. (pitch = latitude =φ,yaw = longitude =θ)

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

那么正确的向量就是向前和向上向量的交叉乘积.它将始终与地平面平行,因为向上的向量总是垂直于接地平面.

左/右strafe键然后使用/ -right向量.对于平行于地平面的前向矢量,您可以将右矢量和向上矢量的十字积乘.

对于GL部分,您可以使用gluLookAt()使用播放器的原点,原点加上向前向量和向上向量.

哦,请添加一个“反转鼠标”选项.

编辑:Here是一个替代解决方案,摆脱了89.9问题,在另一个问题中提到,其中包括首先建立正确的向量(没有音高信息),然后向前和向后.

翻译自:https://stackoverflow.com/questions/1342149/how-would-one-implement-an-fps-camera

转载注明原文:java – 如何实现FPS摄像头?