OpenGL でシンプルなカメラ システムを実装しています。プロジェクション マトリックスの下に gluPerspective を設定し、ModelView マトリックスで gluLookAt を使用します。この後、キーボード イベントをチェックし、矢印キーのいずれかが押された場合は、角度速度と前方速度を変更するメイン レンダー ループを作成します (y 軸のみを回転し、z (前方) を移動します)。次に、次のコードを使用してビューを移動します (deltaTime は、動きをフレームレートから分離するために、最後のフレームがレンダリングされてからの時間 (秒単位) です)。
//place our camera
newTime = RunTime(); //get the time since app start
deltaTime = newTime - time; //get the time since the last frame was rendered
time = newTime;
glRotatef(view.angularSpeed*deltaTime,0,1,0); //rotate
glTranslatef(0,0,view.forwardSpeed*deltaTime); //move forwards
//draw our vertices
draw();
//swap buffers
Swap_Buffers();
その後、コードは再びループします。私の描画アルゴリズムは で始まり、glPushMatrix()
で終わりglPopMatrix()
ます。
glRotatef() と glTranslatef() への各呼び出しは、ビューの方向に前方速度でビューを前方に押します。
ただし、コードを実行すると、オブジェクトは正しい場所に描画されますが、移動すると、ローカルの向きではなく、世界の原点 (0,0,0 - Z 軸に沿って面している) の向きで移動が行われます。 (私が指している場所)回転すると、回転はカメラの位置ではなく(0,0,0)について行われます。
その場で回転するのではなく、カメラが (0,0,0) を周回するという奇妙な効果が得られます。
glLoadIdentity()
ループ内のどこにも電話をかけませんGL_MODELVIEW
。また、ループ全体でマトリックス モードが に設定されていることは確かです。
もう 1 つの奇妙な効果はglLoadIdentity()
、) 関数 (PushMatrix 呼び出しと PopMatrix 呼び出しの間) 内に呼び出しを配置するdraw(
と、画面が真っ暗になり、どこを見ても描画するオブジェクトが見つからないことです。
その場で回転するのではなく、この軌道 (0,0,0) を作成するために私が何を台無しにしたか知っている人はいますか?