void glShadeModel(GLenum mode)
GL_FLAT/【GL_SMOOTH】緩存
着色技術選擇函數
GL.glClearDepth(depth);
glClearDepth:設置深度緩存的清除值spa
參數code
depth 指定清除深度緩存時使用的深度值。對象
說明blog
本函數指定用glClear清除深度緩存時所使用的深度值,該值的範圍在[0,1]之間。get
參數func的值能夠爲GL_NEVER(沒有處理)、GL_ALWAYS(處理全部)、GL_LESS(小於)、GL_LEQUAL(小於等於)、GL_EQUAL(等於)、GL_GEQUAL(大於等於)、GL_GREATER(大於)或GL_NOTEQUAL(不等於),其中默認值是GL_LESS原型
void glHint(GLenum target,GLenum mod)
參數說明:it
target:指定所控制行爲的符號常量,能夠是如下值class
mod:指定所採起行爲的符號常量,能夠是如下值
函數說明:
該函數控制OpenGL在某一方面有解釋的餘地時,所採起的操做行爲。
函數原型:
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()命令將棧頂的矩陣彈出矩陣堆棧,成爲當前矩陣。
glMatrixMode()函數的參數,這個函數其實就是對接下來要作什麼進行一下聲明,也就是在要作下一步以前告訴計算機我要對「什麼」進行操做了,這個「什麼」在glMatrixMode的「()」裏的選項(參數)有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型視圖, GL_TEXTURE 紋理.
若是參數是GL_PROJECTION,這個是投影的意思,就是要對投影相關進行操做,也就是把物體投影到一個平面上,就像咱們照相同樣,把3維物體投到2維的平面上。這樣,接下來的語句能夠是跟透視相關的函數,好比glFrustum()或gluPerspective();
在操做投影矩陣之前,須要調用函數:
glMatrixMode(GL_PROJECTION); //將當前矩陣指定爲投影矩陣
而後把矩陣設爲單位矩陣:
glLoadIdentity();
而後調用glFrustum()或gluPerspective(),它們生成的矩陣會與當前的矩陣相乘,生成透視的效果;
若是參數是GL_MODELVIEW,這個是對模型視景的操做,接下來的語句描繪一個以模型爲基礎的適應,這樣來設置參數,接下來用到的就是像gluLookAt()這樣的函數;
如果GL_TEXTURE,就是對紋理相關進行操做
順便說下,OpenGL裏面的操做,不少是基於對矩陣的操做的,好比位移,旋轉,縮放,因此,這裏其實說的規範一點就是glMatrixMode是用來指定哪個矩陣是當前矩陣,而它的參數表明要操做的目標,GL_PROJECTION是對投影矩陣操做,GL_MODELVIEW是對模型視景矩陣操做,GL_TEXTURE是對紋理矩陣進行隨後的操做。
切換當前矩陣.
如.要使用透視(3D).那麼先要設置透視投影
glMatrixMode(GL_PROJECTION); //切換到投影矩陣.
//...設置透視投影
設置完成後開始畫圖,須要切換到 模型視圖矩陣 才能正確畫圖.
glMatrixMode(GL_MODELVIEW);
// 畫一個物體A (看起來是3D的),
// 如這時候需畫一個 2D效果 的 物體A,那麼又須要透視投影
glMatrixMode(GL_PROJECTION); //切換到投影矩陣..
// ..設置正交投影
//..設置完成,切換回模型視圖矩陣.....
glMatrixMode(GL_MODELVIEW);
// 再畫一個物體A (看起來是2D的)
// 如從頭至尾都是畫3D/2D, 只需初始化時設置一次.
// 若是有交替,那麼就須要glMatrixMode() 切換
// 因這樣設置很煩人,因此又有glPushMatrix() 保存當前矩陣
gluPerspective這個函數指定了觀察的視景體(frustum爲錐臺的意思,一般譯爲視景體)在世界座標系中的具體大小,通常而言,其中的參數aspect應該與窗口的寬高比大小相同。好比說,aspect=2.0表示在觀察者的角度中物體的寬度是高度的兩倍,在視口中寬度也是高度的兩倍,這樣顯示出的物體纔不會被扭曲。