柯 健,李亚琴,任 平
(苏州市职业大学 计算机工程系,江苏 苏州 215104)
虚拟现实是利用计算机系统高度逼真地模拟产生一个三维空间的虚拟世界,提供使用者关于视觉、听觉、触觉等感官的模拟.在虚拟现实中对自然景观(地形、植物、云、海等)的模拟是计算机图形学中的研究难点,其中的地形是对真实世界的反映,包括平原、山脉、丘陵、河流和悬崖等.
地形的生成有符合分形布朗运动[1-2]的空间曲面的分形合成方法,分形技术关注物体的随机性、奇异性和复杂性,通过变换和迭代的过程得到不规则几何形态.常用分形技术包括泊松阶跃法、逆傅里叶变换法、随机中点位移法等[3].但使用分形技术生成的地形具有不可预测性,不能事先知道生成地形的形状,这种方法适用于不需要真实还原的场景.而基于真实地形数据的地形生成可以生成具有真实感的地形图,根据真实地形数据的地形生成大多采用数字地形模型(digital terrain model,DTM)或者数字高程模型(digital elevation model,DEM)[4],DTM是地形表现形态属性信息的数字表达,是带有空间位置特征和地形属性特征的数字描述.DTM中地形属性为高程时称为DEM,DTM数据由在规则网格地形图上采样所得高程值构成,并与飞机或卫星上所拍摄的遥感纹理图像数据相对应.对于大范围的地形区域,使用DTM或DEM实现地形渲染,虽然精度高,但因数据量庞大,数据结构较复杂,即使在高性能的图形硬件平台上要进行实时渲染,也很难实现.
本文利用高度图和DEM数据之间的映射关系,实现了具有真实感地形的生成.
高度图(height map)是根据现实中的真实地形生成的,不是由三角平面模拟的,但在三维世界里常使用三角形代替地形的表面,高度图是一张灰度图,其与位图不同的是,它把像素的颜色值映射为地形的高度值,存储地形的高度数据,每个像素表示一个0~255之间的高度值,0表示地平面,255表示地形最高点.
高度图可以从真实的遥感图像和航空照片处理得到,或者通过Photoshop图像软件绘制得到.高度图如图1所示.
基于高度图生成地形的关键在于将高度图的像素值转换成地形的高程数据,一种可行的方法是在高度图的像素值与地形高程数据之间建立起线性映射关系.对于高度图,先从水平、垂直方向划分为间距相等的网格,例如高度图像素为193×193,分块为3,则划分成的网格为65×65,再找到网格交点处像素的最大和最小灰度值,然后根据DEM数据获得该地形的最大、最小高度,得到地形高度所在的区间,从而建立起高度图像素的灰度值与地形高程之间的映射关系.为了表达一切尽可能的地形高度值,可以用浮点表示,对该区间的高度值进行适当放大或缩小.
图1 高度图
下面为基于高度图对地形生成的实现.
一些主要数据变量如下:
image:指定高度图的图像文件.必须是一个像素数为2n+1的正方形,高度图越大,地形就越详细,但是所耗费的资源也就越多.
terrainWidth,terrainHeight:地形有terrainWidth×terrainHeight个顶点,必须与高度图的像素数相同,terrainWidth和terrainHeight数值是2n+1.
tileSize:每个地形块的大小,地形块有tileSize ×tileSize个顶点.这个数值必须小于terrainWidth,terrainHeight.tileSize的值也必须满足2n+1.
numTilesCol:地形块的列数,它的值满足(terrainWidth-1) / (tileSize-1).
numTilesRow:地形块的行数,它的值满足(terrainHeight-1) / (tileSize-1).
info:为地形信息TerrainInfo类的对象.
TileTerrainInfo:为地形块TileTerrainInfo类的对象.
Tiles:为地形网格TileGrid类的对象.
地形生成的流程如下:
1) 读取高度图,根据高度图的像素个数得到地形的顶点数.
image.load("heightmap.png","heightmap");
2) 计算高度图每个像素的颜色值,得到地形在该点处的高度值并存储到数组中.
3) 根据指定地形块的大小,计算地形块的列数和行数.
4) 对于每个地形块创建一个场景节点,并把它渲染显示.
根据图1生成的部分地形见图2.
本文对三维地形的生成进行了深入的研究,分析了基于分形布朗运动分形技术的地形生成和基于数字地形模型的地形生成,并利用高度图的灰度级特性,在高度图的像素与DEM数据之间建立映射关系,通过这种映射关系,可以创建出光滑的地形,并可根据高度值生成能表现多种地表特征的纹理,从而得到效果逼真的地形景观.另外在游戏或者虚拟现实系统中,基于高度图的实时地形渲染,可以快速检测到用户的操作以及场景中物体与地形之间发生的碰撞,从而计算出相应的碰撞反应,并更新显示碰撞结果.
图2 地形图
[1] 李耀辉,周丽莉. 虚拟现实中三维仿真地形的生成[J]. 微计算机信息,2006,22(4):280-282.
[2] 夏伟杰,周建江. 典型地形SAR回波模拟与SAR图像仿真[J]. 遥感学报,2009,13(3):404-408.
[3] 吴凤娟,刁永锋. Diamond-Square细分算法的三维地形交互生成系统的实现[J]. 计算机系统应用,2008(5):66-68.
[4] 曾维,韩占校,朱学芳. LOD算法在3D地表模拟中的应用研究[J]. 系统仿真学报,2009,21(1):292-294.