CSGL
?
glShadeModel
void glShadeModel(GLenum mode)?
GL_FLAT/【GL_SMOOTH】
著色技術(shù)選擇
?glClearDepth
GL.glClearDepth(depth);?
glClearDepth:設(shè)置深度緩存的清除值
參數(shù)
???depth?指定清除深度緩存時使用的深度值。
說明
本函數(shù)指定用glClear清除深度緩存時所使用的深度值,該值的范圍在[0,1]之間。
glDepthFunc
參數(shù)func的值可以為GL_NEVER(沒有處理)、GL_ALWAYS(處理所有)、GL_LESS(小于)、GL_LEQUAL(小于等于)、GL_EQUAL(等于)、GL_GEQUAL(大于等于)、GL_GREATER(大于)或GL_NOTEQUAL(不等于),其中默認(rèn)值是GL_LESS
?glHint
void glHint(GLenum target,GLenum mod)參數(shù)說明:
????? target:指定所控制行為的符號常量,可以是以下值
- GL_FOG_HINT:指定霧化計算的精度。如果OpenGL實現(xiàn)不能有效的支持每個像素的霧化計算,則GL_DONT_CARE和GL_FASTEST霧化效果中每個定點的計算。
- GL_LINE_SMOOTH_HINT:指定反走樣線段的采樣質(zhì)量。如果應(yīng)用較大的濾波函數(shù),GL_NICEST在光柵化期間可以生成更多的像素段。
- GL_PERSPECTIVE_CORRECTION_HINT:指定顏色和紋理坐標(biāo)的差值質(zhì)量。如果OpenGL不能有效的支持透視修正參數(shù)差值,那么GL_DONT_CARE 和?GL_FASTEST可以執(zhí)行顏色、紋理坐標(biāo)的簡單線性差值計算。
- GL_POINT_SMOOTH_HINT:指定反走樣點的采樣質(zhì)量,如果應(yīng)用較大的濾波函數(shù),GL_NICEST在光柵化期間可以生成更多的像素段。
- GL_POLYGON_SMOOTH_HINT:指定反走樣多邊形的采樣質(zhì)量,如果應(yīng)用較大的濾波函數(shù),GL_NICEST在光柵化期間可以生成更多的像素段。
????? mod:指定所采取行為的符號常量,可以是以下值
- GL_FASTEST:選擇速度最快選項。
- GL_NICEST:選擇最高質(zhì)量選項。
- GL_DONT_CARE:對選項不做考慮。
函數(shù)說明:
????? 該函數(shù)控制OpenGL在某一方面有解釋的余地時,所采取的操作行為。
glLoadIdentity
函數(shù)原型:
?????void glLoadIdentity(void)
函數(shù)說明:
????? OpenGL為我們提供了一個非常簡單的恢復(fù)初始坐標(biāo)系的手段,那就是調(diào)用glLoadIdentity()命令。該命令是一個無參的無值函數(shù),其功能是用一個4×4的單位矩陣來替換當(dāng)前矩陣,實際上就是對當(dāng)前矩陣進(jìn)行初始化。也就是說,無論以前進(jìn)行了多少次矩陣變換,在該命令執(zhí)行后,當(dāng)前矩陣均恢復(fù)成一個單位矩陣,即相當(dāng)于沒有進(jìn)行任何矩陣變換狀態(tài)。
????? 單位矩陣就是對角線上都是1,其余元素皆為0的矩陣。
????? 當(dāng)您調(diào)用glLoadIdentity()之后,您實際上將當(dāng)前點移到了屏幕中心:類似于一個復(fù)位操作
????? 1.X坐標(biāo)軸從左至右,Y坐標(biāo)軸從下至上,Z坐標(biāo)軸從里至外。
????? 2.OpenGL屏幕中心的坐標(biāo)值是X和Y軸上的0.0f點。
????? 3.中心左面的坐標(biāo)值是負(fù)值,右面是正值。
???????? 移向屏幕頂端是正值,移向屏幕底端是負(fù)值。
?????????移入屏幕深處是負(fù)值,移出屏幕則是正值。
????? glLoadIdentity()該函數(shù)的功能是重置當(dāng)前指定的矩陣為單位矩陣.在語義上,其等同于用單位矩陣調(diào)用glLoadMatrix()。但是,在一些情況下,glLoadIdentity()更加效率。
????? 由于某些原因可能使得當(dāng)前矩陣中的元素有一些不確定的值,這將導(dǎo)致程序?qū)D形對象進(jìn)行幾何變形時得到一個非預(yù)期的結(jié)果。因此有必要將當(dāng)前矩陣初始成 一個單位矩陣,即對圖形對象不做任何變換。這就是為什么在調(diào)用過glMatrixMode()命令后,總是要調(diào)用該命令的原因。由于glMatrixMode()命令本身也是一種矩陣變換,它將當(dāng)前矩陣變成命令參數(shù)所規(guī)定的形式,若不用單位矩陣來替換它,在此矩陣下繪制出的圖形將是難以預(yù)計的。
???? 需要注意的是,用單位矩陣替換當(dāng)前矩陣并不改變當(dāng)前矩陣模式。
???? 應(yīng)當(dāng)說明的是,用一個單位矩陣來替換當(dāng)前矩陣的做法并非在任何場合下都可以使用。例如,已經(jīng)進(jìn)行了3次矩陣變換,而現(xiàn)在打算將當(dāng)前矩陣恢復(fù)到第二次變換后的狀態(tài)時,該方法將失效。此時可用glPushMatrix()命令將每次變換前的矩陣壓入矩陣堆棧,在進(jìn)行完新矩陣中的各種操作后,再利用glPopMatrix()命令將棧頂?shù)木仃噺棾鼍仃嚩褩?#xff0c;成為當(dāng)前矩陣。
glMatrixMode
glMatrixMode()函數(shù)的參數(shù),這個函數(shù)其實就是對接下來要做什么進(jìn)行一下聲明,也就是在要做下一步之前告訴計算機(jī)我要對“什么”進(jìn)行操作了,這個“什么”在glMatrixMode的“()”里的選項(參數(shù))有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型視圖, GL_TEXTURE 紋理.
如果參數(shù)是GL_PROJECTION,這個是投影的意思,就是要對投影相關(guān)進(jìn)行操作,也就是把物體投影到一個平面上,就像我們照相一樣,把3維物體投到2維的平面上。這樣,接下來的語句可以是跟透視相關(guān)的函數(shù),比如glFrustum()或gluPerspective();
在操作投影矩陣以前,需要調(diào)用函數(shù):
glMatrixMode(GL_PROJECTION); //將當(dāng)前矩陣指定為投影矩陣
然后把矩陣設(shè)為單位矩陣:
glLoadIdentity();
然后調(diào)用glFrustum()或gluPerspective(),它們生成的矩陣會與當(dāng)前的矩陣相乘,生成透視的效果;
如果參數(shù)是GL_MODELVIEW,這個是對模型視景的操作,接下來的語句描繪一個以模型為基礎(chǔ)的適應(yīng),這樣來設(shè)置參數(shù),接下來用到的就是像gluLookAt()這樣的函數(shù);
若是GL_TEXTURE,就是對紋理相關(guān)進(jìn)行操作
順便說下,OpenGL里面的操作,很多是基于對矩陣的操作的,比如位移,旋轉(zhuǎn),縮放,所以,這里其實說的規(guī)范一點就是glMatrixMode是用來指定哪一個矩陣是當(dāng)前矩陣,而它的參數(shù)代表要操作的目標(biāo),GL_PROJECTION是對投影矩陣操作,GL_MODELVIEW是對模型視景矩陣操作,GL_TEXTURE是對紋理矩陣進(jìn)行隨后的操作。
切換當(dāng)前矩陣.
如.要使用透視(3D).那么先要設(shè)置透視投影
glMatrixMode(GL_PROJECTION); //切換到投影矩陣.
//...設(shè)置透視投影
設(shè)置完成后開始畫圖,需要切換到 模型視圖矩陣 才能正確畫圖.
glMatrixMode(GL_MODELVIEW);
// 畫一個物體A (看起來是3D的),
// 如這時候需畫一個 2D效果 的 物體A,那么又需要透視投影
glMatrixMode(GL_PROJECTION); //切換到投影矩陣..
// ..設(shè)置正交投影
//..設(shè)置完成,切換回模型視圖矩陣.....
glMatrixMode(GL_MODELVIEW);
// 再畫一個物體A (看起來是2D的)
// 如從頭到尾都是畫3D/2D, 只需初始化時設(shè)置一次.
// 如果有交替,那么就需要glMatrixMode() 切換
// 因這樣設(shè)置很煩人,所以又有g(shù)lPushMatrix() 保存當(dāng)前矩陣
gluPerspective
gluPerspective這個函數(shù)指定了觀察的視景體(frustum為錐臺的意思,通常譯為視景體)在世界坐標(biāo)系中的具體大小,一般而言,其中的參數(shù)aspect應(yīng)該與窗口的寬高比大小相同。比如說,aspect=2.0表示在觀察者的角度中物體的寬度是高度的兩倍,在視口中寬度也是高度的兩倍,這樣顯示出的物體才不會被扭曲。
glViewport
glViewport在默認(rèn)情況下,視口被設(shè)置為占據(jù)打開窗口的整個像素矩形,如圖1,窗口大小和設(shè)置視口大小相同,所以為了選擇一個更小的繪圖區(qū)域,就可以用glViewport函數(shù)來實現(xiàn)這一變換,在窗口中定義一個像素矩形,最終將圖像映射到這個矩形中。例如可以對窗口區(qū)域進(jìn)行劃分,在同一個窗口中顯示分割屏幕的效果,以顯示多個視圖。轉(zhuǎn)載于:https://www.cnblogs.com/because/p/7757903.html
總結(jié)
- 上一篇: 用两个路由器怎么连接 电脑两个路由器如何
- 下一篇: 学生ID查询