GLUT教程(三) GLUT視窗設定

來源:互聯網
上載者:User
 

下載下面的VC工程並運行它(glut0.zip)(這個就是上一節的工程)。你將看到兩個視窗:一個控制台視窗,一個OpenGL視窗。現在改變視窗大小使高度與寬度不再相等,這時三角形發生變形。這會發生是因為你沒有正確設定投影矩陣。預設的是透視投影矩陣且高寬比為1.因此高寬比改變了,投影就會變形。因此只要高寬比改變了,投影就應該重新計算。

 

GLUT定義了當視窗大小改變時哪一個函數應該被調用。此外,這個函數還會在視窗初次被建立時調用,保證初始化視窗不是正方形的時候渲染也不會變形出錯。

 

這個函數是glutReshapeFunc()。

void glutReshapeFunc(void(*func)(int width,int height));

參數:

func: 指負責設定正確投影的函數的名稱。

因此我們必須做的第一件事是回到main()函數。在上一章的代碼裡加入對glutReshapeFunc()的調用,讓我們把負責視窗尺寸的函數叫做changeSize。現在的代碼如下。

void main(int argc, char **argv) {

         glutInit(&argc, argv);

         glutInitDisplayMode(GLUT_DEPTH | GLUT_SINGLE | GLUT_RGBA);

         glutInitWindowPosition(100,100);

         glutInitWindowSize(320,320);

         glutCreateWindow("3D Tech- GLUT Tutorial");

         glutDisplayFunc(renderScene);

         

         // Here is our new entry in the main function 

         glutReshapeFunc(changeSize);

         

         glutMainLoop();

}

下面我們需要做的就是定義函數changeSize()。從glutReshapeFunc()函數的聲明可以看到,changSize()函數有兩個形參。。這兩個參數代表新的視窗高度和寬度。

void changeSize(int w, int h) {

 

         // 防止除數即高度為0

         // (你可以設定視窗寬度為0).

         if(h == 0)

                 h = 1;

 

         float ratio = 1.0* w / h;

 

         // 單位化投影矩陣。

         glMatrixMode(GL_PROJECTION);

         glLoadIdentity();

         

         // 設定視口大小為增個視窗大小

         glViewport(0, 0, w, h);

 

         // 設定正確的投影矩陣

         gluPerspective(45,ratio,1,1000);

        //下面是設定模型視圖矩陣

         glMatrixMode(GL_MODELVIEW);

         glLoadIdentity();

         gluLookAt(0.0,0.0,5.0, 0.0,0.0,-1.0,0.0f,1.0f,0.0f);

}

我們在上一小段代碼裡引進了一些函數。下面讓我們詳細講解,以免讓你感到很迷茫。

第一步是計算高寬比(wight/height)。注意為了計算正確,我們必須保證高度不為0。

 

接著,我們設定當前矩陣為投影矩陣,這個矩陣定義了一個可視空間(viewing volume)。

我們調用一個單位矩陣來初始化投影矩陣。然後我們用函數glViewport把視口設定為整個視窗。你也可以設定不同的值。函數中(0,0)指定了視口的左下角,(w,h)指定了視口矩形的大小。注意這個座標是和用戶端區域有關的,而不是螢幕座標。。

 

gluPerspective函數是其他OpenGL庫(GLU庫)裡的一個函數。(gluPerspective函數的參數,設定請參見其他書籍。我並不想在GLUT講解裡再加入其他一些OpenGL內容的講解。)

 

最後就是設定模型觀測矩陣。調用GL_MODELVIEW把當前矩陣設為模型觀測矩陣。gluLookAt()也是GLU庫裡的一個函數,其參數詳細設定參見其他書籍。

 

下面是這章的VC工程(glut1.zip),你可以自己設定大小,改變參數值。要真正弄懂程式究竟是怎樣啟動並執行。

  (本人翻譯水平有限,錯誤之處望指正,謝謝)
文章來源:http://www.lighthouse3d.com/opengl/glut/index.php?3

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.