How would one implement an FPS camera?

前端 未结 4 982
长发绾君心
长发绾君心 2021-02-13 20:55

So I\'m currently working on some FPS game programming in OpenGL (JOGL, more specifically) just for fun and I wanted to know what would be the recommended way to create an FPS-l

4条回答
  •  没有蜡笔的小新
    2021-02-13 21:23

    The way I have always seen it done is using two angles, yaw and pitch. The two axes of mouse movement correspond to changes in these angles.

    You can calculate the forward vector easily with a spherical-to-rectangular coordinate transformation. (pitch=latitude=φ, yaw=longitude=θ)

    You can use a fixed up vector (say (0,0,1)) but this means you can't look directly upwards or downwards. (Most games solve this by allowing you to look no steeper than 89.999 degrees.)

    The right vector is then the cross product of the forward and up vectors. It will always be parallel to the ground plane since the up vector is always perpendicular to the ground plane.

    Left/right strafe keys then use the +/-right vector. For a forward vector parallel to the ground plane, you can take the cross product of the right and the up vectors.

    As for the GL part, you can simply use gluLookAt() using the player's origin, the origin plus the forward vector and the up vector.

    Oh and please, please add an "invert mouse" option.

    Edit: Here's an alternative solution which gets rid of the 89.9 problem, asked in another question, which involves building the right vector first (with no pitch information) and then forward and up.

提交回复
热议问题