柯 健,李亞琴,任 平
(蘇州市職業(yè)大學(xué) 計(jì)算機(jī)工程系,江蘇 蘇州 215104)
虛擬現(xiàn)實(shí)是利用計(jì)算機(jī)系統(tǒng)高度逼真地模擬產(chǎn)生一個(gè)三維空間的虛擬世界,提供使用者關(guān)于視覺(jué)、聽(tīng)覺(jué)、觸覺(jué)等感官的模擬.在虛擬現(xiàn)實(shí)中對(duì)自然景觀(地形、植物、云、海等)的模擬是計(jì)算機(jī)圖形學(xué)中的研究難點(diǎn),其中的地形是對(duì)真實(shí)世界的反映,包括平原、山脈、丘陵、河流和懸崖等.
地形的生成有符合分形布朗運(yùn)動(dòng)[1-2]的空間曲面的分形合成方法,分形技術(shù)關(guān)注物體的隨機(jī)性、奇異性和復(fù)雜性,通過(guò)變換和迭代的過(guò)程得到不規(guī)則幾何形態(tài).常用分形技術(shù)包括泊松階躍法、逆傅里葉變換法、隨機(jī)中點(diǎn)位移法等[3].但使用分形技術(shù)生成的地形具有不可預(yù)測(cè)性,不能事先知道生成地形的形狀,這種方法適用于不需要真實(shí)還原的場(chǎng)景.而基于真實(shí)地形數(shù)據(jù)的地形生成可以生成具有真實(shí)感的地形圖,根據(jù)真實(shí)地形數(shù)據(jù)的地形生成大多采用數(shù)字地形模型(digital terrain model,DTM)或者數(shù)字高程模型(digital elevation model,DEM)[4],DTM是地形表現(xiàn)形態(tài)屬性信息的數(shù)字表達(dá),是帶有空間位置特征和地形屬性特征的數(shù)字描述.DTM中地形屬性為高程時(shí)稱(chēng)為DEM,DTM數(shù)據(jù)由在規(guī)則網(wǎng)格地形圖上采樣所得高程值構(gòu)成,并與飛機(jī)或衛(wèi)星上所拍攝的遙感紋理圖像數(shù)據(jù)相對(duì)應(yīng).對(duì)于大范圍的地形區(qū)域,使用DTM或DEM實(shí)現(xiàn)地形渲染,雖然精度高,但因數(shù)據(jù)量龐大,數(shù)據(jù)結(jié)構(gòu)較復(fù)雜,即使在高性能的圖形硬件平臺(tái)上要進(jìn)行實(shí)時(shí)渲染,也很難實(shí)現(xiàn).
本文利用高度圖和DEM數(shù)據(jù)之間的映射關(guān)系,實(shí)現(xiàn)了具有真實(shí)感地形的生成.
高度圖(height map)是根據(jù)現(xiàn)實(shí)中的真實(shí)地形生成的,不是由三角平面模擬的,但在三維世界里常使用三角形代替地形的表面,高度圖是一張灰度圖,其與位圖不同的是,它把像素的顏色值映射為地形的高度值,存儲(chǔ)地形的高度數(shù)據(jù),每個(gè)像素表示一個(gè)0~255之間的高度值,0表示地平面,255表示地形最高點(diǎn).
高度圖可以從真實(shí)的遙感圖像和航空照片處理得到,或者通過(guò)Photoshop圖像軟件繪制得到.高度圖如圖1所示.
基于高度圖生成地形的關(guān)鍵在于將高度圖的像素值轉(zhuǎn)換成地形的高程數(shù)據(jù),一種可行的方法是在高度圖的像素值與地形高程數(shù)據(jù)之間建立起線性映射關(guān)系.對(duì)于高度圖,先從水平、垂直方向劃分為間距相等的網(wǎng)格,例如高度圖像素為193×193,分塊為3,則劃分成的網(wǎng)格為65×65,再找到網(wǎng)格交點(diǎn)處像素的最大和最小灰度值,然后根據(jù)DEM數(shù)據(jù)獲得該地形的最大、最小高度,得到地形高度所在的區(qū)間,從而建立起高度圖像素的灰度值與地形高程之間的映射關(guān)系.為了表達(dá)一切盡可能的地形高度值,可以用浮點(diǎn)表示,對(duì)該區(qū)間的高度值進(jìn)行適當(dāng)放大或縮小.
圖1 高度圖
下面為基于高度圖對(duì)地形生成的實(shí)現(xiàn).
一些主要數(shù)據(jù)變量如下:
image:指定高度圖的圖像文件.必須是一個(gè)像素?cái)?shù)為2n+1的正方形,高度圖越大,地形就越詳細(xì),但是所耗費(fèi)的資源也就越多.
terrainWidth,terrainHeight:地形有terrainWidth×terrainHeight個(gè)頂點(diǎn),必須與高度圖的像素?cái)?shù)相同,terrainWidth和terrainHeight數(shù)值是2n+1.
tileSize:每個(gè)地形塊的大小,地形塊有tileSize ×tileSize個(gè)頂點(diǎn).這個(gè)數(shù)值必須小于terrainWidth,terrainHeight.tileSize的值也必須滿(mǎn)足2n+1.
numTilesCol:地形塊的列數(shù),它的值滿(mǎn)足(terrainWidth-1) / (tileSize-1).
numTilesRow:地形塊的行數(shù),它的值滿(mǎn)足(terrainHeight-1) / (tileSize-1).
info:為地形信息TerrainInfo類(lèi)的對(duì)象.
TileTerrainInfo:為地形塊TileTerrainInfo類(lèi)的對(duì)象.
Tiles:為地形網(wǎng)格TileGrid類(lèi)的對(duì)象.
地形生成的流程如下:
1) 讀取高度圖,根據(jù)高度圖的像素個(gè)數(shù)得到地形的頂點(diǎn)數(shù).
image.load("heightmap.png","heightmap");
2) 計(jì)算高度圖每個(gè)像素的顏色值,得到地形在該點(diǎn)處的高度值并存儲(chǔ)到數(shù)組中.
3) 根據(jù)指定地形塊的大小,計(jì)算地形塊的列數(shù)和行數(shù).
4) 對(duì)于每個(gè)地形塊創(chuàng)建一個(gè)場(chǎng)景節(jié)點(diǎn),并把它渲染顯示.
根據(jù)圖1生成的部分地形見(jiàn)圖2.
本文對(duì)三維地形的生成進(jìn)行了深入的研究,分析了基于分形布朗運(yùn)動(dòng)分形技術(shù)的地形生成和基于數(shù)字地形模型的地形生成,并利用高度圖的灰度級(jí)特性,在高度圖的像素與DEM數(shù)據(jù)之間建立映射關(guān)系,通過(guò)這種映射關(guān)系,可以創(chuàng)建出光滑的地形,并可根據(jù)高度值生成能表現(xiàn)多種地表特征的紋理,從而得到效果逼真的地形景觀.另外在游戲或者虛擬現(xiàn)實(shí)系統(tǒng)中,基于高度圖的實(shí)時(shí)地形渲染,可以快速檢測(cè)到用戶(hù)的操作以及場(chǎng)景中物體與地形之間發(fā)生的碰撞,從而計(jì)算出相應(yīng)的碰撞反應(yīng),并更新顯示碰撞結(jié)果.
圖2 地形圖
[1] 李耀輝,周麗莉. 虛擬現(xiàn)實(shí)中三維仿真地形的生成[J]. 微計(jì)算機(jī)信息,2006,22(4):280-282.
[2] 夏偉杰,周建江. 典型地形SAR回波模擬與SAR圖像仿真[J]. 遙感學(xué)報(bào),2009,13(3):404-408.
[3] 吳鳳娟,刁永鋒. Diamond-Square細(xì)分算法的三維地形交互生成系統(tǒng)的實(shí)現(xiàn)[J]. 計(jì)算機(jī)系統(tǒng)應(yīng)用,2008(5):66-68.
[4] 曾維,韓占校,朱學(xué)芳. LOD算法在3D地表模擬中的應(yīng)用研究[J]. 系統(tǒng)仿真學(xué)報(bào),2009,21(1):292-294.