OpenGL实践之--窗口创建

摘要:
OpenGL作为一种图形界面,严重依赖于windows。它必须在窗口中绘制图形,但不包含窗口和相关内容。然而,GLUT并不是一个特别全面的窗口系统工具包。在构建大型复杂应用程序时,仍然需要根据需要选择相应的窗口系统工具包。配置显示功能voidglutInitDisplayMode;模式默认为GLUT_ INDEXGLUT_ SINGLE、GLUT_ DEPTH的按位组合。后台管理voidglutIdleFunc//当没有其他事件要处理时调用func。典型的应用程序包括动画事件循环void glutMainLoop()//从不返回

  作为一个图形接口的OpenGL在使用严重依赖窗口,必须在窗口中绘制图形,但是自身并没有包含窗口及其相关内容。因此,学习OpenGL就必须了解一种窗口系统,不同的操作系统提供的创建窗口的API都不相同,为了避免学习OpenGL时必须去学习一整套的窗口系统的不便,简单应用可以使用GLUT(OpenGL Utility Toolkit),是一套和窗口系统无关的软件包,提供了窗口创建及用户输入输出等功能。但GLUT并不是一个功能特别全面的窗口系统工具包,在构建大型复杂应用时还是需要根据需求选择相应的窗口系统工具包。freeglut随着opengl的发展而保持更新,以下使用freeglut,没有使用原生的glut。

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_INDEXGLUT_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();//永远不会返回

免责声明:文章转载自《OpenGL实践之--窗口创建》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Jenkins部分插件介绍合并排序下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

OpenGL的GLUT事件处理(Event Processing)窗口管理(Window Management)函数[转]

GLUT事件处理(Event Processing)窗口管理(Window Management)函数 void glutMainLoop(void)      让glut程序进入事件循环。在一个glut程序中最多只能调用一次。一旦调用,会直到程序结束才返回。 int glutCreateWindow(char* name);     产生一个顶层的窗口。...

C++ 变量作用域

作用域是程序的一个区域,一般来说有三个地方可以定义变量: 在函数或一个代码块内部声明的变量,称为局部变量。 在函数参数的定义中声明的变量,称为形式参数。 在所有函数外部声明的变量,称为全局变量。 局部变量 在函数或一个代码块内部声明的变量,称为局部变量。它们只能被函数内部或者代码块内部的语句使用。 #include<iostream> us...

Node.js server使用

一、创建项目 #创建项目目录 cd /data mkdir webroot cd webroot #初始化git git init vim .gitignore 输入: node_modules/ 保存: :wq #初始化npm,生成package.json npm init #安装express npm install -D express #...

SuperSocket源码解析之会话生命周期

一 基本概念    会话(Session)是客户端与服务器进行通信的基本单元,也是一个Socket的封装,在http协议中也有Session机制,其主要作用封装一个通信单元socket,负责服务器与客户端消息发送与接收,会话之间相互独立互不干扰且拥有唯一SessionId标识,维护着客户与服务器通信的生命周期。 二 SocketSession Socket...

Delphi初始化与结束化

unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) procedure FormCreate(Sender:...

OpenGL的核心模式与立即渲染模式

早期的OpenGL使用立即渲染模式(Immediate mode,也就是固定渲染管线),这个模式下绘制图形很方便。OpenGL的大多数功能都被库隐藏起来,开发者很少能控制OpenGL如何进行计算的自由。而开发者迫切希望能有更多的灵活性。随着时间推移,规范越来越灵活,开发者对绘图细节有了更多的掌控。立即渲染模式确实容易使用和理解,但是效率太低。因此从Open...