论文部分内容阅读
王继东 庞明勇 李建生
摘 要:介绍了GLUT的设计原理和功能,阐述了基于GLUT构建OpenGL应用程序框架的步骤。并给出一个具体的应用程序实例。
关键词:GLUT OpenGL 应用程序框架
1 GLUT设计原理与功能
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-dio\VC98\Include\GL,glut32.1ib复制到\Microsoft VisualStudio\VC98\Lib),把glut32.dll复制到操作系统所在文件夹的子文件夹中(一般为\WlNNT\system32)。
打开VC6.0建立一个空的Win32控制台程序并新建一个C 源文件。在C 源文件的开始处,除了包含其他必要头文件以外还必须包含GLUT头文件,代码为:#in-elude。因为glut.h文件中已包含了glu.h和g1.h文件,所以不需要再使用include命令包含这两个文件了。
程序库的链接可以通过VC6.0的菜单选项“Project->settings”设置,不过这里我们使用更加灵活方便的命令行完成,这样在Debug模式与Release模式之间切换时就不会出错。代码如下:
3.3 OpenGL绘制与交互
4 结束语
开发者使用GLUT能够在不考虑开发平台的基础上直接进行OpenGL图形开发,提高了应用程序的开发效率降低了开发的门槛。
摘 要:介绍了GLUT的设计原理和功能,阐述了基于GLUT构建OpenGL应用程序框架的步骤。并给出一个具体的应用程序实例。
关键词:GLUT OpenGL 应用程序框架
1 GLUT设计原理与功能
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-dio\VC98\Include\GL,glut32.1ib复制到\Microsoft VisualStudio\VC98\Lib),把glut32.dll复制到操作系统所在文件夹的子文件夹中(一般为\WlNNT\system32)。
打开VC6.0建立一个空的Win32控制台程序并新建一个C 源文件。在C 源文件的开始处,除了包含其他必要头文件以外还必须包含GLUT头文件,代码为:#in-elude
程序库的链接可以通过VC6.0的菜单选项“Project->settings”设置,不过这里我们使用更加灵活方便的命令行完成,这样在Debug模式与Release模式之间切换时就不会出错。代码如下:
3.3 OpenGL绘制与交互
4 结束语
开发者使用GLUT能够在不考虑开发平台的基础上直接进行OpenGL图形开发,提高了应用程序的开发效率降低了开发的门槛。