OpenGl學習之glPushMatrix、glPopMatrix

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章