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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值