APP下载

基于GLUT的OpenGL应用程序框架构建

2007-08-25王继东等

智能计算机与应用 2007年4期
关键词:调用文件夹实例

王继东等

王继东庞明勇李建生

摘要:介绍了GLUT的设计原理和功能,阐述了基于GLUT构建OpenGL应用程序框架的步骤。并给出一个具体的应用程序实例。

关键词:GLUTOpenGL应用程序框架

1GLUT设计原理与功能

GLUT是用ANSI C和FORTRAN语言实现的一个编程接口,其API是独立于窗口系统的,所以它不返回任何活动的窗口句柄、指针及其他数据结构。GLUT简化了应用OpennGL渲染的过程,通过GLUT的API只需简单的几步就能为OpenGL创建一个可供渲染的窗口。它的设计和OpennGL一样也是基于状态机的,当前窗口和当前菜单是GLUT两个最重要的状态,OpenGL中的函数一般只作用于这些状态绑定的窗口。根据简单应用程序的一般要求,GLUT合理地预定义了大部分的初始状态,从而简化了状态设置过程。

GLUT提供的功能包括多窗口OpenGL渲染、回调模式驱动的程序执行方式、完整的输入设备、提供系统闲置时调用的idle函数、提供弹出式菜单、提供常用的线框和实体模型的绘制、支持图像/图形字体的绘制、其它的窗口管理功能(包括管理重叠层)等,这些功能基本满足了OpenGL图形应用程序开发的需要。

2基于GLUT构建OpenGL应用程序框架的方法

基于GLUT构建OpenGL的应用程序框架可以按照以下几个步骤进行:

(1)初始化和创建窗口。在任何GLUT子程序之前,应首先调用能够处理命令行选项的gutlnit()函数对GLUT库进行初始化,然后,再调用glutInitDisplayMode()、glu-tlnitWindowSize()、glutInitWindowPosition()对窗口的显示模式、大小以及窗口在屏幕中的位置进行设置,最后,调用gutCreateWindow()函数创建新窗口;(2)设置OoenGL初始状态。一般在窗口创建成功后,我们将要对OpenGL初始状态进行设置。如使用glColor*()函数设置当前颜色,使用glLingIlt*()函数设置光源属性,使用gIBlendFunc()函数设置混合操作,使用glEnable()和glDisable()函数激活和关闭各种状态开关等;(3)注册回调函数。在程序进入主循环之前,应对回调函数进行0注册。常用的注册回调函数有:glutDisplayFunc()函数、glutReshapeFunc()函数、glutKeyboardFunc()函数、glutSpecialFunc()函数、glutInit()函数。(4)进入GLUT事件处理循环。在完成前面所有设置后,就可以通过glutMainLoop()函数进入GLUT事件处理循环。当某事件被激活,应用程序将调用相应的已注册回调函数实现特定的功能,如窗口重绘、键盘交互、鼠标交互等。

3应用程序实例

在Windows2000和VC6.0环境下,建立一个基于GLUT的简单OpenGL程序实例。实例主要是绘制一个半透明纹理的正方体,并可以使用键盘上的Home键和方向键控制正方体旋转。

3.1 Include文件及程序库链接设置

把glut.h、glut32.1ib文件复制到VC6.0程序文件夹下的子文件夹中(glut.h复制到Microsoft Visual Stu-dioVC98IncludeGL,glut32.1ib复制到Microsoft VisualStudioVC98Lib),把glut32.dll复制到操作系统所在文件夹的子文件夹中(一般为WlNNTsystem32)。

打开VC6.0建立一个空的Win32控制台程序并新建一个C++源文件。在C++源文件的开始处,除了包含其他必要头文件以外还必须包含GLUT头文件,代码为:#in-elude。因为glut.h文件中已包含了glu.h和g1.h文件,所以不需要再使用include命令包含这两个文件了。

程序库的链接可以通过VC6.0的菜单选项“Project->settings”设置,不过这里我们使用更加灵活方便的命令行完成,这样在Debug模式与Release模式之间切换时就不会出错。代码如下:

3.2程序主函数的编写

基于GLUT的OpenGL应用程序框架主要在main()函数中构建,代码如下:

3.3 OpenGL绘制与交互

4结束语

开发者使用GLUT能够在不考虑开发平台的基础上直接进行OpenGL图形开发,提高了应用程序的开发效率降低了开发的门槛。

猜你喜欢

调用文件夹实例
Fast Folders,让你的文件夹四通八达
摸清超标源头 大文件夹这样处理
调动右键 解决文件夹管理三大难题
基于Android Broadcast的短信安全监听系统的设计和实现
不容忽视的空文件夹
完形填空Ⅱ
完形填空Ⅰ
利用RFC技术实现SAP系统接口通信
C++语言中函数参数传递方式剖析