《武汉工程大学学报》  2011年07期 108-110   出版日期:2011-08-30   ISSN:1674-2869   CN:42-1779/TQ
基于OpenGL的三维景观动态仿真


0引言三维可视化技术是当今一个十分活跃的研究领域,已广泛应用于地质、房地产、医学、娱乐与游戏、气象数据等多个领域.此技术的核心是在虚拟环境下如何实现三维真实感图形的模拟仿真[12].目前OpenGL (Open Graphics Library)是三维/二维图形构建领域中最被广泛接纳的专业图形接口,它是一个与硬件无关的软件接口,包含120多个图形韩式,可大量减少编程工作量,并且可在不同的平台间支持相互移植,提供了处理光照和物体材质、纹理等众多通用功能的强大底层图形库.结合OpenGL的众多优点,本研究借助OpenGL软件包实现了三维自然景观的可视化控制系统,从而更直观地表达虚拟环境下的三维景观真实效果,便于众多领域的可视化应用借鉴,具有一定的价值.1开发环境设置本研究以Visual C++ 6.0可视化编程工具为平台,借助OpenGL图形库来设置开发环境.具体的开发环境设置步骤如下[35]:a.首先建立工程,并将OpenGL相关头文件和链接库分别加到Visual C++的Include和Lib的目录中; b.在视图类的PreCreateWindow函数内设置窗口类型; c.在视图类的OnCreate函数下面进行OpenGL的初始化工作;d.在OnSize 函数中定义视口和观察坐标;e.在OnDestroy函数中释放绘制描述表RC和Windows设备描述表DC;f.在OnDraw 函数中加入绘制场景的代码.2自然景物的模拟及其关键技术2.1随机插值地形的模拟本研究在地形可视化过程中采用了随机插值地形模拟的方法,设计思想如图1所示.
图1随机插值法模拟地形设计思想
Fig.1Design thought of terrain simulation by
 random interpolation method2.1.1随机地形网格生成算法  地形模拟中涉及到的一个核心值就是高程值.所谓高程值,在测量学中定义是某地表点在地球引力方向上的高度,也就是重心所在地球引力线的高度.通俗的理解,高程也即是地面点到高度起算面的垂直距离,它是确定地面的一个重要因素.根据高程值的大小来模拟地形的高低起伏的效果.本文采用取随机值的方法获得某点高程值.核心算法描述如下:
在程序中首先分别定义出随机地形的最大高程值m_max和最小高程值m_min变量,利用m_min+(m_maxm_min)*(float)(rand( )%10 000/10 000获取生成地形网格所需某点高程值.
2.1.2地形绘制——CatmullRom多阶样条曲线插值法CatmullRom三次样条插值算法是一种在已知点进行插值的一种有效算法,具有较强的稳定性和光滑性.结合CatmullRom三次样条插值的特性和优点,本研究采用CatmullRom三次样条曲线插值的方法[67]模拟三维地形.CatmullRom三次样条简单示意图如图2所示.第7期刘琪:基于OpenGL的三维景观动态仿真
武汉工程大学学报第33卷
图2CatmullRom样条曲线
Fig.2CatmullRom spline curve图2中P0、P1、P2、P3是控制点,定义一个浮点坐标u,u∈[0.0,1.0],当u=0.0时为P1点,当u=1.0时为P2点,当u在[0.0,1.0]之间变化时,所描绘是3次分段插值CatmullRom样条曲线,该样条曲线基本方程如下所示(保持C1连续).p(u)=0.5×[1uu2u3]·
0200
-1010
2-54-1
-13-31p0
p1
p2
p3(31)最后,采用三角形近似、纹理贴图和显示列表技术,绘制出比较平滑和逼真的三维随机地形,效果如图3所示.图3曲线插值法生成的地形和纹理生成后的地形
Fig.3Terrain generated by curve interpolation and
terrain generated after texture实现地形的可视化核心步骤为:a.利用CatmullRom样条公式(31)求出三维地形的随机插值点;b.设置在控制系统中显示三维地形的大小;c.调用网格列表函数实现地形网格的绘制;d.利用纹理技术对随机地形进行渲染;e.通过调用OpenGL中SwapBuffers函数进行相关处理,实现交互系统三维景观的动画效果.2.2天空模拟[89]本研究采用纹理映射技术模拟天空.首先从OpenGL三维图形库中调用gluSphere函数绘制一定大小的球体用球体模型绘制天空,然后采集天空真实数据,经PhotoShop处理后转换成位图文件,装入程序中,将其作为纹理图通过调用OpenGL 纹理函数进行设置纹理参数、绑定纹理、设置纹理坐标等步骤纹理映射 [1011] 到球体模型上,从而使天空模型更加逼真地接近自然景观,而且还能消除文本锯齿.同时为增加动态感,实现了纹理按照一定的方向运动的效果.天空生成的流程图如图4所示,效果图如图5所示.图4天空生成的流程图
Fig.4The flow chart of sky图5采集的真实天空图片和纹理生成后的模拟天空
Fig.5The picture of real sky and
the simulative sky generated after texture3结语本研究采用OpenGL软件包开发工具,在Visual C++ MFC建立的友好界面下,实现了三维自然景观可视化控制系统的模拟.此控制系统实现的功能有:a.通过工具栏上的菜单,随机生成不同的三维地形和天空.b.键盘的上、下、左、右键,对整体景观实时漫游控制,从而更接近真实效果.效果展示图如图6所示.图6整体效果图
Fig.6The whole effect picture