一、glMatrixMode()函數的參數,這個函數其實就是對接下來要做什么進行一下聲明,也就是在要做下一步之前告訴計算機我要對“什么”進行操作了,這個“什么”在glMatrixMode的“()”里的選項(參數)有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型視圖, GL_TEXTURE 紋理。
二保存狀態矩陣
glPushMatrix、glPopMatrix操作事實上就相當於棧里的入棧和出棧。
很多人不明確的可能是入的是什么,出的又是什么。
比如你當前的坐標系原點在你電腦屏幕的左上方。如今你調用glPushMatrix,然后再調用一堆平移、旋轉代碼等等,然后再繪圖。那些平移和旋轉都是基於左上角為原點進行變化的。並且都會改變坐標的位置,經過了這些變化后,你的坐標肯定不再左上角了。
那假設想恢復怎么辦呢?這時就調用glPopMatrix從棧里取出一個“狀態”了,這個狀態就是你調用glPushMatrix之前的那個狀態。就如非常多opengl的書上所講:調用glPushMatrix事實上就是把當前狀態做一個副本放入堆棧之中。
當你做了一些移動或旋轉等變換后,使用glPushMatrix();
OpenGL 會把這個變換后的位置和角度保存起來。
然后你再隨便做第二次移動或旋轉變換,再用glPopMatrix();
OpenGL 就把剛剛保存的那個位置和角度恢復。
比方:
glLoadIdentity();
glTranslatef(1,0,0);//向右移動(1,0,0)
glPushMatrix();//保存當前位置
glTranslatef(0,1,0);//如今是(1,1,0)了
glPopMatrix();//這樣,如今又回到(1,0,0)了