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() 儲存當前矩陣
OpenGL(3) OpenGL視角的計算
oepngl繪圖的過程中,讓camera指向正確的方向比較容易,然而,在使用投影函式的過程中,一定要把物體放在裁剪範圍之內,當繪製出來的物體大小不合適的時候,可能是由於使用了glperspective 函式導致的,可以通過修改函式第乙個引數的值來調整大小。那麼第乙個引數的角度 視角 是如何確定的呢?...
OpenGL學習筆記 OpenGL的變換和矩陣
opengl的變換和矩陣 1 指定矩陣型別 opengl中使用glmatrixmode指定當前要設定的矩陣型別,常用的引數是gl projection和gl modelview,還有gl texture。opengl將視點變換 即攝像機變換 和模型變換 即物體變換和世界變換 合二為一了。glmatr...
OpenGL學習筆記 OpenGL的變換和矩陣
opengl的變換和矩陣 1 指定矩陣型別 opengl中使用glmatrixmode指定當前要設定的矩陣型別,常用的引數是gl projection和gl modelview,還有gl texture。opengl將視點變換 即攝像機變換 和模型變換 即物體變換和世界變換 合二為一了。glmatr...