このトピックをカバーするチュートリアルがWebにたくさんあるので、Googleは確かにあなたを助けます。
基本について:あなたはあなたの位置とカメラの回転を保存したいと思うでしょう。Zが上軸であるとすると、矢印を使用してXとYのみを変更する必要があります。
また、カメラの向きを保存する場合、Z軸(移動方向)とX軸(上下を見上げる)に沿った回転の合成として保存されるとします。
単純なクラス:
class Player
{
protected:
float3 Position; // Z-up
float2 CameraRotation; // X for turning, Y for up-down
public:
void MoveForward()
{
Position.X += -cosf(CameraRotation.X) * PLAYER_SPEED;
Position.Y += -sinf(CameraRotation.X) * PLAYER_SPEED;
}
// when using any other arrow, just add a multiply of PI/2 to the camera rotation
// PI for backwards, +PI/2 for left strafe and -PI/2 for right strafe.
// If you don't want to use mouse, use left and right arrow to modify camera rotation
// and MoveForward and Backward will look the same, having different signs.
};
sinf関数とcosf関数の前にある「-」記号は、おそらくこの種の動作が必要になるためです。自由に変更してください。
カメラに関しては、フレーム間にマウスデルタを実装する必要があります。すべてのフレームで、マウスの位置を前の位置と比較します。次に、回転して速度を見てそれを乗算し、カメラの値に直接設定します。
これがお役に立てば幸いです。