日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux OpenGL 实践篇-2 创建一个窗口

發布時間:2023/11/29 linux 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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 创建一个窗口的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。