Linux OpenGL 实践篇-2 创建一个窗口
OpenGL 作為一個圖形接口,并沒有包含窗口的相關(guān)內(nèi)容,但OpenGL使用必須依賴窗口,即必須在窗口中繪制。這就要求我們必須了解一種窗口系統(tǒng),但不同的操作系統(tǒng)提供的創(chuàng)建窗口的API都不相同,如果我們在學(xué)習(xí)OpenGL時要去學(xué)習(xí)一整套的窗口系統(tǒng),這將帶來很多的不便,所以出現(xiàn)了GLUT。GLUT全稱OpenGL Utility Toolkit,是一套和窗口系統(tǒng)無關(guān)的軟件包,為我們提供了窗口創(chuàng)建,用戶輸入輸出處理等功能。優(yōu)點是:簡小,精悍。注意GLUT并不是一個功能特別全面的窗口系統(tǒng)工具包,所以構(gòu)建大型應(yīng)用的時候還是需要根據(jù)需求選擇相應(yīng)的本機(jī)窗口系統(tǒng)工具包。
GLUT現(xiàn)有兩個發(fā)行版:freeglut和原始版本的glut。原始glut的更新并沒有隨著opengl的發(fā)展而保持更新,所以本實踐中采用的是freeglut。
GLUT的基本流程包括四步:
1)初始化GLUT庫;
2)創(chuàng)建GLUT窗口;
3)注冊display()回調(diào)函數(shù);
4)進(jìn)入GLUT主循環(huán);
?
glut初始化
在使用glut之前,一定要初始化glut庫。函數(shù)原型為:
void glutInit(int argc,char **argv);
接下來可設(shè)置glut的一些屬性。
?
配置顯示特性
void glutInitDisplayMode(unsigned int mode);
mode 默認(rèn)為GLUT_INDEX\GLUT_SINGLE、GLUT_DEPTH的按位組合。
?
配置OpenGL版本
void glutInitContextVersion(int majorVersion, int minorVersion);
?
配置創(chuàng)建的上下文信息
void? glutInitContextProfile(int profile)
core版本:GLUT_CORE_PROFILE;
兼容性版本:GLUT_COMPATIBILITY_PROFILE;
?
創(chuàng)建窗口
int glutCreateWindow(char* name);
?
設(shè)置窗口位置和大小
void glutInitWindowSize(int width,int height);
void glutInitWindowPosition(int x, int y);
?
設(shè)置渲染函數(shù)
void glutDisplayFunc(void (*func)(void));
?
窗口變化回調(diào)函數(shù)
void glutReshapeFunc(void (*func)(int width, int height));
?
鍵盤按鍵事件監(jiān)聽
?void glutKeyboardFunc(void (*func)(unsigned char key, int x, int y));
void glutKeyboardUpFunc(void (*func)(unsigned char key, int x, int y));
?
鼠標(biāo)事件監(jiān)聽
void glutMouseFunc(void (*func)(int button, int state, int x, int y)); //鼠標(biāo)被按下是觸發(fā)
void glutMotionFunc(void (*func)(int x, int y));//按下鼠標(biāo)按鈕并在窗口內(nèi)移動觸發(fā)
void glutPassiveMotionFunc(void (*func)(int x, int y));//鼠標(biāo)指針在窗口內(nèi)移動
?
窗口重繪標(biāo)記
void? glutPostRedisplay(void);標(biāo)記窗口需要重繪,在下一次的執(zhí)行過程中,將調(diào)用渲染函數(shù)。
?
背景管理
void glutIdleFunc(void (*func)(void));//當(dāng)沒有其它事件需要處理時的時候調(diào)用func,典型應(yīng)用如動畫
?
事件循環(huán)
void glutMainLoop();//永遠(yuǎn)不會返回
?
轉(zhuǎn)載于:https://www.cnblogs.com/xin-lover/p/8470380.html
總結(jié)
以上是生活随笔為你收集整理的Linux OpenGL 实践篇-2 创建一个窗口的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 做梦梦到了好多鱼是什么意思
- 下一篇: Linux命令之文件相关