OpenGL初学时遇到的一些常见的函数之解析
1.問:openGL中glutReshapeFunc與glutDisplayFunc的區別
如題 窗口創建初和 每次改變大小這兩個都會執行 他們有什么區別?可以不用glutDisplayFunc嗎?
答:glutReshapeFunc是窗口改變的時候調用的函數,在這個里面可以根據縮放后的窗口重新設置
camera的內部參數,比如橫縱比啥的,而glutDisplayFunc是顯示的時候調用,可見改變窗口后
調用glutReshapeFunc后還是會調用glutDisplayFunc進行顯示的。
不可以不用glutDisplayFunc,比如你想實現動畫效果,也就是說窗口大小不變而里面的內容發生變化,這時候通過設置glutIdelFunc,在里面最后調用glutpostdisplay(我記不清楚了,應該是這個函數),來通知glutdisplayFuc重畫,這樣就能實現動畫。
簡單的說,glutReshapeFunc與glutIdelFunc這些函數都不去直接處理顯示,而是設置好相應的參數,讓glutdisplayfunc來執行繪制。
glutReshapeFunc確實是調整窗口大小時被調用,此函數常用在保持視圖的寬高比上。
(來源:https://zhidao.baidu.com/question/486852819.html)
2.glutIdleFunc函數
原型:
void glutIdleFunc(void(*func)(void));
參數:
func:在程序空閑的時候就會被調用的函數的函數名。
按照我們的想法,當程序空閑時應該調用的函數是我們先前定義的渲染函數: renderScene。由于OpenGL默認沒有開啟深度測試,我們還要開啟它,這樣我們才能知道哪個物體在前面,哪個物體在后面。深度測試的開啟在main()函數里,下面看看現在的main函數。
void main(int argc, char **argv) {
glutInit(&argc, argv);
}
下面就是設置渲染函數renderScene。我們定義了一個浮點型變量并初始化為0.0,下面在renderScene函數加一些必須的東西。
float angle=0.0;
void renderScene(void) {
//注意我們這里清除了深度緩沖區。 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //保存當前模型視圖矩陣。 glPushMatrix(); glRotatef(angle,0.0,1.0,0.0); glBegin(GL_TRIANGLES); glVertex3f(-0.5,-0.5,0.0); glVertex3f(0.5,0.0,0.0); glVertex3f(0.0,0.5,0.0); glEnd(); // 彈出堆棧 glPopMatrix(); // 交換緩沖區 glutSwapBuffers(); // 讓angle自動增加。 angle ;}
分享來源:http://blog.sina.com.cn/s/blog_680374c30100l7lh.html
總結
以上是生活随笔為你收集整理的OpenGL初学时遇到的一些常见的函数之解析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: OpenGL教程——GLUT初始化
- 下一篇: OpenGL中的着色模式GL_SMOOT