用OpenGL开发三维交互式虚拟场景
40 计算机应用2000年
存中,然而对于有调色板的位图文件,读取的是颜色索引值而非RGB颜色值,所以应对照其调色板转换成RGB值,然后填入一字节数组中,该字节数组地址才可为纹理映射函数所采用以实现纹理贴图。若要输出画面至位图文件,首先使用OpenGL函数glReadPixels获取客户区象素数据,设置了输出文件的文件头和位图头,把该数据填至上述象素数据阵列的正确位置,即完成位图文件的写工作。
3)实时交互式三维场景的制作分层次规划,建立几何模型
OpenGL以顶点为参数来绘制三角形、多边形,进一步组合可构成基本三维模型。对于复杂的几何模型,可用三角形和多边形进行逼近或者用二次曲面来构造,如用B样条曲面来模拟弯曲的墙体等。OpenGL提供了二维评价器,可方便地通过修改控制点与结点值来改变NURBS样条曲面的形状。
布置舞台,实现第一人称视觉效果
建立几何实体后,通过旋转平移等几何变换移至三维空间的适当位置。在OpenGL中,定义几何体采用世界坐标系,所有的旋转、平移均对之产生影响。
在真实感三维场景布置中,只采用透视投影而不采用平行投影。透视投影又可选择透视视景体或
对称视景体。透视视景体在世界坐标系中的位置如图3所示。
这里以透视视景体为例说明三维场景漫游中第一人称视觉效果的实现,假设坦克正逼近近剪切
面,视景体内的景图3 世界坐标系中的透视视景体物应越来越大,若
坦克转过一个角度后,应看到不同角度的景物,上述操作均通过相对运动来实现,即固定坦克车体的世界坐标,而让景物向相反方向运动或旋转,因而可产生正确的第一人称视觉效果。
三维物体的真实效果处理a)对多边形顶点指定不同颜色值,利用平滑着色模式可将多边形内部填上顺滑的渐变色,达到Gouraud明暗着色处理效果。
b)建立各种不同灯光和材质,每种材质均由环境色、扩散色、镜面高亮色组成,分别说明了该种材质对环境光、漫反射光和镜面反射光的反射率,赋与物体适当的材质,在不同位置和方向架设定点或定向光源可产生真实的场景效果。
c)利用纹理贴图来产生真实感较强的物体材质。
动画性能最优化
a)首先最重要的是显示列表。显示列表是经过编译的一系列OpenGL命令的高速缓存,显示列表的调用极大地提高了OpenGL的绘图效率,此外显示列表的嵌套定义可以方便地把先前定义的各个部件有机地组合起来构成最后几何形体。
b)矩阵堆栈,利用矩阵堆栈来管理场景和运动物体,物体和其组件,运动物体间的相对位置。
c)在OnCreate函数中一次生成位图纹理,防止临时读位图文件,另外所有物体的构造,即定义显示列表的工作均要放在OnCreate函数中一次性生成以提高系统的运行效率。
d)调用双缓存机制以实现平滑的动画效果OpenGL把帧存分为当前可见的前台视频缓存(Frontbuffers)和不可见的正在画的后台视频缓存(Backbuffers)利用双缓存模式把后台视频缓存的内容输出到前台视频缓存,同时对后台视频缓存的内容进行计算,这样就可以实现画面的平滑输出,动画中物体之间的相互响应控制可综合采用定时器、多线程技术,并通过响应键盘、鼠标消息来控制。
4 实验及总结
基于上述设计的两个类及视景制作思路,作者制作了一个三维模拟射击游戏,图4是场景 角的
效果图。
目前基于OpenGL的三维图形开发正快速涌现。其中也包括MsWindows平台的射击游戏、虚拟场景浏览、运动仿真、科学计算可视化、CAD/CAM等。而采用本
图4 3D模拟射击游戏场景 角
文介绍的MFC环境
下OpenGL开发技术和方法,可缩短程序开发周期,增强物体真实感,提高程序运行速度和效率。
参考文献
[1] 王敏.Windows图形动画游戏程序设计[M].北京:学苑出版社,1994.
[2] K.R.Castleman.DigitalImageProcessing[M].Prentice
Hall,1996.
[3] JeffreyRichter.AdvancedWindowsthirdedition[M].MicrosoftPress,1997.
[4] DavidBenett.VisualC++5Developer sGuide[M].
SamsPublishing,1997.
[5] OpenGLARB.OpenGLProgrammingGuide:Version1.2
[M].PrenticeHall,1999.