天天看點

OpenGL函數思考-glLoadIdentity

OpenGL函數思考-glLoadIdentity

函數原型:

     void glLoadIdentity(void)

函數說明:

      OpenGL為我們提供了一個非常簡單的恢複初始坐标系的手段,那就是調用glLoadIdentity()指令。該指令是一個無參的無值函數,其功能是用一個4×4的機關矩陣來替換目前矩陣,實際上就是對目前矩陣進行初始化。也就是說,無論以前進行了多少次矩陣變換,在該指令執行後,目前矩陣均恢複成一個機關矩陣,即相當于沒有進行任何矩陣變換狀态。

      機關矩陣就是對角線上都是1,其餘元素皆為0的矩陣。

      當您調用glLoadIdentity()之後,您實際上将目前點移到了螢幕中心:類似于一個複位操作

      1.X坐标軸從左至右,Y坐标軸從下至上,Z坐标軸從裡至外。

      2.OpenGL螢幕中心的坐标值是X和Y軸上的0.0f點。

      3.中心左面的坐标值是負值,右面是正值。

         移向螢幕頂端是正值,移向螢幕底端是負值。

         移入螢幕深處是負值,移出螢幕則是正值。

      glLoadIdentity()該函數的功能是重置目前指定的矩陣為機關矩陣.在語義上,其等同于用機關矩陣調用glLoadMatrix()。但是,在一些情況下,glLoadIdentity()更加效率。

      由于某些原因可能使得目前矩陣中的元素有一些不确定的值,這将導緻程式對圖形對象進行幾何變形時得到一個非預期的結果。是以有必要将目前矩陣初始成 一個機關矩陣,即對圖形對象不做任何變換。這就是為什麼在調用過glMatrixMode()指令後,總是要調用該指令的原因。由于glMatrixMode()指令本身也是一種矩陣變換,它将目前矩陣變成指令參數所規定的形式,若不用機關矩陣來替換它,在此矩陣下繪制出的圖形将是難以預計的。

     需要注意的是,用機關矩陣替換目前矩陣并不改變目前矩陣模式。

     應當說明的是,用一個機關矩陣來替換目前矩陣的做法并非在任何場合下都可以使用。例如,已經進行了3次矩陣變換,而現在打算将目前矩陣恢複到第二次變換後的狀态時,該方法将失效。此時可用glPushMatrix()指令将每次變換前的矩陣壓入矩陣堆棧,在進行完新矩陣中的各種操作後,再利用glPopMatrix()指令将棧頂的矩陣彈出矩陣堆棧,成為目前矩陣。