2011-08-04 15 views
8

私はOpenGL、SDLに関する本を読んでおり、OpenGLのドキュメントの一部を読んでいます。私はまたこの記事を読んだ:What does glLoadIdentity() do in OpenGL?glMatrixModeを呼び出すたびにglLoadIdentityを呼び出す必要があるのはなぜですか?

私はglLoadIdentity()が何をしているのか把握していて、なぜそれが一般的な意味で(現在の行列を元の状態に戻すために)使われているのですか?私が知らないのはなぜ私が元の状態に戻すのかということです。例えば:

glMatrixMode(GL_PROJECTION); 
glLoadIdentity(); 

glOrtho(0.0f, 640, 480, 0.0f, -1.0f, 1.0f); 

glMatrixMode(GL_MODELVIEW); 
glLoadIdentity(); 

私はglLoadIdentityは()glMatrixModeへの各呼び出しの後に呼び出される必要があり、なぜ正確にわかりません。

答えて

13

When to call glMatrixMode()は - 第一の答えを説明しようとします:あなたがする場合は、「新鮮」始めているよう

glLoadIdentity()は一般的に、マトリックスモード変更した直後に呼び出されます。 gluPerspective()、glOrtho()、glFrustum()、glRotate()、glMultMatrix()、glTranslate()などの行列変換は、複雑な3D世界空間変換を記述するか、OpenGL表示を記述できるように集約されるため、ボリューム。例:私は、+ X方向に変換してZ軸の周りを回転させたい場合、glRotate()の後にglTranslate()を発行します。

glLoadIdentity()は、(現在の行列モードの)行列を恒等行列で抹消するので、glLoadIdentity()によるgluPerspective()はglLoadIdentity()への単一の呼び出しに相当します。言い換えれば、そのシーケンスは無意味です。

+1

完璧、その答えを指摘していただきありがとうございます。私は次回より掘り下げます。 –

関連する問題