OpenGl的glMatrixMode()函數理解

glMatrixMode()函數的參數,這個函數其實就是對接下來要作什麼進行一下聲明,也就是在要作下一步以前告訴計算機我要對「什麼」進行操做了,這個「什麼」在glMatrixMode的「()」裏的選項(參數)有3種模式: GL_PROJECTION 投影, GL_MODELVIEW 模型視圖, GL_TEXTURE 紋理.

若是參數是GL_PROJECTION,這個是投影的意思,就是要對投影相關進行操做,也就是把物體投影到一個平面上,就像咱們照相同樣,把3維物體投到2維的平面上。這樣,接下來的語句能夠是跟透視相關的函數,好比glFrustum()或gluPerspective();函數

在操做投影矩陣之前,須要調用函數:it

glMatrixMode(GL_PROJECTION); //將當前矩陣指定爲投影矩陣基礎

而後把矩陣設爲單位矩陣:
glLoadIdentity();
而後調用glFrustum()或gluPerspective(),它們生成的矩陣會與當前的矩陣相乘,生成透視的效果;
rust


若是參數是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() 保存當前矩陣計算機

相關文章
相關標籤/搜索