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