OpenGL之glLoadIdentity函數(shù)的用法
函數(shù)原型:
?????void glLoadIdentity(void)
函數(shù)說明:
????? OpenGL為我們提供了一個(gè)非常簡(jiǎn)單的恢復(fù)初始坐標(biāo)系的手段,那就是調(diào)用glLoadIdentity()命令。該命令是一個(gè)無參的無值函數(shù),其功能是用一個(gè)4×4的單位矩陣來替換當(dāng)前矩陣,實(shí)際上就是對(duì)當(dāng)前矩陣進(jìn)行初始化。也就是說,無論以前進(jìn)行了多少次矩陣變換,在該命令執(zhí)行后,當(dāng)前矩陣均恢復(fù)成一個(gè)單位矩陣,即相當(dāng)于沒有進(jìn)行任何矩陣變換狀態(tài)。
????? 單位矩陣就是對(duì)角線上都是1,其余元素皆為0的矩陣。
????? 當(dāng)您調(diào)用glLoadIdentity()之后,您實(shí)際上將當(dāng)前點(diǎn)移到了屏幕中心:類似于一個(gè)復(fù)位操作
????? 1.X坐標(biāo)軸從左至右,Y坐標(biāo)軸從下至上,Z坐標(biāo)軸從里至外。
????? 2.OpenGL屏幕中心的坐標(biāo)值是X和Y軸上的0.0f點(diǎn)。
????? 3.中心左面的坐標(biāo)值是負(fù)值,右面是正值。
???????? 移向屏幕頂端是正值,移向屏幕底端是負(fù)值。
?????????移入屏幕深處是負(fù)值,移出屏幕則是正值。
????? glLoadIdentity()該函數(shù)的功能是重置當(dāng)前指定的矩陣為單位矩陣.在語(yǔ)義上,其等同于用單位矩陣調(diào)用glLoadMatrix()。但是,在一些情況下,glLoadIdentity()更加效率。
????? 由于某些原因可能使得當(dāng)前矩陣中的元素有一些不確定的值,這將導(dǎo)致程序?qū)D形對(duì)象進(jìn)行幾何變形時(shí)得到一個(gè)非預(yù)期的結(jié)果。因此有必要將當(dāng)前矩陣初始成 一個(gè)單位矩陣,即對(duì)圖形對(duì)象不做任何變換。這就是為什么在調(diào)用過glMatrixMode()命令后,總是要調(diào)用該命令的原因。由于glMatrixMode()命令本身也是一種矩陣變換,它將當(dāng)前矩陣變成命令參數(shù)所規(guī)定的形式,若不用單位矩陣來替換它,在此矩陣下繪制出的圖形將是難以預(yù)計(jì)的。
???? 需要注意的是,用單位矩陣替換當(dāng)前矩陣并不改變當(dāng)前矩陣模式。
???? 應(yīng)當(dāng)說明的是,用一個(gè)單位矩陣來替換當(dāng)前矩陣的做法并非在任何場(chǎng)合下都可以使用。例如,已經(jīng)進(jìn)行了3次矩陣變換,而現(xiàn)在打算將當(dāng)前矩陣恢復(fù)到第二次變換后的狀態(tài)時(shí),該方法將失效。此時(shí)可用glPushMatrix()命令將每次變換前的矩陣壓入矩陣堆棧,在進(jìn)行完新矩陣中的各種操作后,再利用glPopMatrix()命令將棧頂?shù)木仃噺棾鼍仃嚩褩?,成為?dāng)前矩陣。
原文鏈接:https://blog.csdn.net/shuaihj/article/details/7228265