摘 要:随着计算机图形图像技术的飞速发展,OpenGL作为一个开放的三维图形软件包,得到了更为广泛的应用。本文通过对opengl编程理论的研究,实现了opengl图形可视化的多重视窗显示,可在各自的视窗中显示各种各样的图片和在多视图中显示特定的物体,为我们制作分屏游戏以及编写多视图的3D程序提供一种思路。
关键词:opengl;分屏;可视化
一、引言
OpenGL是一个独立于窗口系统和操作系统的开放的三维图形软件包,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以与Visual C++紧密接口使用简便,效率高。经过对GL的进一步发展,在实现二维和三维的高级图形技术方面,OpenGL表现十分优越,它包括建模、变换、光线处理、色彩处理、动画以及更先进的能力,如纹理映射、物体运动模糊等。
二、OpenGL开发环境搭建
1. 安装好vs2005后,将下载的glut包里的glut.h文件复制到vs2005安装目录下面的“VCPlatformSDKincludegl文件夹”;
2. 把glut.lib和glut32.lib复制到vs2005安装目录下面的“VClib”文件夹;
3. 把glut.dll和glut32.dll放到操作系统目录下面的system32文件夹内。
4. VS2005下使用opengl的配置问题:在项目选项卡中属性 设置里面的prepro_cessor definition添加GLUT_BUILDING_LIB,中间用分号隔开,然后在additional dependencies添加glut32.lib Opengl32.lib Glu32.lib 。
三、Opengl分屏的核心代码实现
首先,我们用ReshapeGL()的glViewport函数来获取屏幕主视口分辨率;然后用glClear()函数来清空整个屏幕,清空每个视窗的深度缓存。
假定我们要实现4个视窗,所以用loop建立一个0到3的循环。首先用glColor3ub函数设置当前视口的颜色。然后设置视窗大小。如果loop值为0,我们画第一个视口。我们把第一个视口放在屏幕的左半部分(0),并且在屏幕的上半部(window_height/2)。视口的宽度为当前主窗口的一半(window_width/2), 高度也为主窗口高度的一半(window_height/2). 如果主窗口为1024x768, 结果就是一个起点坐标为0,384,宽512,高384的视口。通过glViewport()函数来设定窗口大小;glMatrixMode()函数来设置投影矩阵;而用glLoadIdentity()函数来重置投影矩阵;最后用gluOrtho2D()函数来定义一个二维图像投影矩阵,建立了一个可视的二位平面区域。此时效果如图1所示。
如果loop值为1,我们开始画第二个窗口。它在屏幕的右上部分,宽度和高度都跟前一个视图一样。不同的是glViewport()函数的第一个参数为window_width/2.这将视窗起点定为窗口左起一半的地方。然后我们设置当前矩阵为投影矩阵并重置它。但这次我们用gluPerspective()函数,同时将透视投影参数FOV设置为45度,并且近截面值设置为0.1f,远截面值设置为500.0f。如图2所示。
如果loop值为2,我们画第三个视口。它在主窗口的右下部分。宽度和高度与第二个视口一样。跟第二个视口不同的是glViewport()函数的第二个参数为0.这定义视窗位于主窗口的右下部分。如图3所示。
如果loop等于3,我们就画第四个视口。它将位于窗口的左下部分。宽度和高度跟前几次设置一样。唯一跟第三个视口不同的是glViewport()的第一个参数为0.这告诉程序视口将在主窗口的左下部分。如图4所示。
图1 图2
图3 图4
四、总结
通过实现opengl可视化的多重视窗分屏,我们可以用代码在各自的视口中显示各种各样的图片,或在多视图中显示特定的物体,为我们制作分屏游戏以及编写多视图的3D程序提供一种思路。
参考文献:
[1]《OPENGL超级宝典》,(美国)赖特,人民邮电出版社,2005年9月1日
[2]《Visual C++ OpenGL应用程序开发》,郭兆荣、李菁、王彦,人民邮电出版社,2006年6月
[3]《三维游戏设计师宝典-学OpenGL编3D游戏》,毛伟冬、唐明理,2005年5月
[4]《OpenGL开发指南(中文)》,中国游戏开发者