我一直看到它的方式是使用两个角度,偏航和俯仰.鼠标移动的两个轴对应于这些角度的变化.
您可以forward使用球面到直角坐标转换轻松计算矢量.(pitch = latitude =φ,yaw = longitude =θ)
您可以使用固定up向量(例如(0,0,1)),但这意味着您无法直接向上或向下查看.(大多数游戏通过让你看起来不比89.999度更陡峭来解决这个问题.)
然后,right向量是向前和向上向量的叉积.它始终与地平面平行,因为向上矢量始终垂直于地平面.
左/右strafe键然后使用+/-right向量.对于forward平行于地平面的矢量,您可以采用矢量right和up矢量的叉积.
至于GL部分,你可以简单地使用gluLookAt()玩家的原点,原点加上forward矢量和up矢量.
哦,请,请添加"反转鼠标"选项.
编辑:这是一个解决89.9问题的替代解决方案,在另一个问题中提出,其中涉及right首先构建向量(没有音高信息)然后forward和up.