CSGL
?
glShadeModel
void glShadeModel(GLenum mode)?
GL_FLAT/【GL_SMOOTH】
著色技術選擇
?glClearDepth
GL.glClearDepth(depth);?
glClearDepth:設置深度緩存的清除值
參數
???depth?指定清除深度緩存時使用的深度值。
說明
本函數指定用glClear清除深度緩存時所使用的深度值,該值的范圍在[0,1]之間。
glDepthFunc
參數func的值可以為GL_NEVER(沒有處理)、GL_ALWAYS(處理所有)、GL_LESS(小于)、GL_LEQUAL(小于等于)、GL_EQUAL(等于)、GL_GEQUAL(大于等于)、GL_GREATER(大于)或GL_NOTEQUAL(不等于),其中默認值是GL_LESS
?glHint
void glHint(GLenum target,GLenum mod)參數說明:
????? target:指定所控制行為的符號常量,可以是以下值
- GL_FOG_HINT:指定霧化計算的精度。如果OpenGL實現不能有效的支持每個像素的霧化計算,則GL_DONT_CARE和GL_FASTEST霧化效果中每個定點的計算。
- GL_LINE_SMOOTH_HINT:指定反走樣線段的采樣質量。如果應用較大的濾波函數,GL_NICEST在光柵化期間可以生成更多的像素段。
- GL_PERSPECTIVE_CORRECTION_HINT:指定顏色和紋理坐標的差值質量。如果OpenGL不能有效的支持透視修正參數差值,那么GL_DONT_CARE 和?GL_FASTEST可以執行顏色、紋理坐標的簡單線性差值計算。
- GL_POINT_SMOOTH_HINT:指定反走樣點的采樣質量,如果應用較大的濾波函數,GL_NICEST在光柵化期間可以生成更多的像素段。
- GL_POLYGON_SMOOTH_HINT:指定反走樣多邊形的采樣質量,如果應用較大的濾波函數,GL_NICEST在光柵化期間可以生成更多的像素段。
????? mod:指定所采取行為的符號常量,可以是以下值
- GL_FASTEST:選擇速度最快選項。
- GL_NICEST:選擇最高質量選項。
- GL_DONT_CARE:對選項不做考慮。
函數說明:
????? 該函數控制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()命令將棧頂的矩陣彈出矩陣堆棧,成為當前矩陣。
glMatrixMode
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
gluPerspective這個函數指定了觀察的視景體(frustum為錐臺的意思,通常譯為視景體)在世界坐標系中的具體大小,一般而言,其中的參數aspect應該與窗口的寬高比大小相同。比如說,aspect=2.0表示在觀察者的角度中物體的寬度是高度的兩倍,在視口中寬度也是高度的兩倍,這樣顯示出的物體才不會被扭曲。
glViewport
glViewport在默認情況下,視口被設置為占據打開窗口的整個像素矩形,如圖1,窗口大小和設置視口大小相同,所以為了選擇一個更小的繪圖區域,就可以用glViewport函數來實現這一變換,在窗口中定義一個像素矩形,最終將圖像映射到這個矩形中。例如可以對窗口區域進行劃分,在同一個窗口中顯示分割屏幕的效果,以顯示多個視圖。轉載于:https://www.cnblogs.com/because/p/7757903.html
總結
- 上一篇: 用两个路由器怎么连接 电脑两个路由器如何
- 下一篇: 学生ID查询