渠澗濤,陳小潘,趙亞萌,王 鵬,楊偉峰
(1.河南大學(xué) 計算機與信息工程學(xué)院,河南 開封 475004;2.中國科學(xué)院 遙感與數(shù)字地球研究所,北京 100012)
基于WPF的大規(guī)模地形可視化系統(tǒng)設(shè)計與實現(xiàn)
渠澗濤1,2,陳小潘1,趙亞萌2,王 鵬1,2,楊偉峰1,2
(1.河南大學(xué) 計算機與信息工程學(xué)院,河南 開封 475004;2.中國科學(xué)院 遙感與數(shù)字地球研究所,北京 100012)
針對大規(guī)模地形可視化的需求,設(shè)計并實現(xiàn)了基于WPF的大規(guī)模地形可視化系統(tǒng)。闡述了虛擬地球、瓦片金字塔結(jié)構(gòu)、數(shù)字高程模型的基本原理及在系統(tǒng)中的應(yīng)用,設(shè)計了基于游戲循環(huán)的可視化框架,實現(xiàn)了自由攝像機、瓦片模型調(diào)度、瓦片模型生成等關(guān)鍵功能。實驗表明,該系統(tǒng)能夠?qū)崟r、準(zhǔn)確地實現(xiàn)大規(guī)模地形的可視化,具有較高的應(yīng)用價值。
大規(guī)模地形可視化;WPF;游戲循環(huán);海量地形數(shù)據(jù);地形瓦片模型
隨著計算機圖形顯示技術(shù)以及圖形硬件處理能力的不斷提高,大規(guī)模地形可視化在地理信息系統(tǒng)、游戲開發(fā)和飛行器輔助設(shè)計等領(lǐng)域的應(yīng)用越來越廣泛[1-3]。目前大規(guī)模地形可視化軟件大多基于國外的平臺軟件開發(fā)[4-6],如NASA的World Wind,Esri公司的Arc Engine,Skyline公司的Terra Explorer Pro等。也有研究人員嘗試從底層開發(fā),實現(xiàn)大規(guī)模地形可視化[7-8],但大多采用OpenGL、DirectX等底層圖形庫來編寫,開發(fā)周期長,維護困難。WPF是微軟開發(fā)的新一代圖形顯示技術(shù),其核心是一個與分辨率無關(guān)且基于向量的呈現(xiàn)引擎,能夠充分利用現(xiàn)代圖形硬件的優(yōu)勢[9],提升可視化展示的效果,對三維開發(fā)常用的3D攝像機、三維模型等內(nèi)容都有很好的封裝,可以有效縮短開發(fā)周期。
本文設(shè)計并實現(xiàn)了一個基于WPF的大規(guī)模地形可視化系統(tǒng),該系統(tǒng)能夠展示指定地理位置真實的地形地貌,還提供了豐富的攝像機操作,支持對三維地形的全方位瀏覽,并能根據(jù)用戶請求動態(tài)、實時地更新三維場景。
1.1 大規(guī)模地形數(shù)據(jù)
地形數(shù)據(jù)能夠表現(xiàn)地球表面的高低起伏狀態(tài),是具有高程信息的數(shù)據(jù)。遙感數(shù)據(jù)含有豐富的地理環(huán)境信息,是地形數(shù)據(jù)的主要來源。隨著航空航天遙感技術(shù)的不斷發(fā)展,遙感數(shù)據(jù)的獲取速度也隨之加快,數(shù)據(jù)精度不斷增加。每提高1倍地形數(shù)據(jù)的分辨率,對應(yīng)的數(shù)據(jù)量就會增加4倍[10]。在這種背景下產(chǎn)生的大規(guī)模地形數(shù)據(jù)不僅數(shù)據(jù)量大,還具有覆蓋地域廣、數(shù)據(jù)精度高的特點,例如本文所使用的SRTM(shuttle radar topography mission)數(shù)據(jù),覆蓋了北緯 60°~南緯56°之間80%的陸地地表面積,數(shù)據(jù)總量高達12 TB[11],分辨率有30 m和90 m 兩種,本文采用的是90 m分辨率的數(shù)據(jù)。
1.2 虛擬地球模型
傳統(tǒng)的大規(guī)模地形可視化系統(tǒng)大多將地形模型放在一個平面上展示,這種方式不能真實反映地形的地理位置,為海量地形數(shù)據(jù)的存儲、組織及加載增加了難度,不利于大規(guī)模地形的展示,也使可視化場景缺乏真實感,降低了用戶體驗。因此,需要構(gòu)建一個虛擬的地球模型作為大規(guī)模地形可視化的展示平臺。
本文采用經(jīng)緯度網(wǎng)格和WGS84坐標(biāo)系構(gòu)建虛擬地球模型。首先,將WGS84坐標(biāo)系定義的地球參考橢球面按照經(jīng)緯線進行剖分,然后計算各個頂點網(wǎng)格的經(jīng)緯度坐標(biāo)和紋理坐標(biāo),并將各個頂點的經(jīng)緯度坐標(biāo)按照公式(1)~(3)轉(zhuǎn)換為三維空間直角坐標(biāo)[12]。
式中,λ、φ、h分別代表經(jīng)度、緯度和高程;x、y、z分別是空間坐標(biāo)系X軸、Y軸和Z軸的坐標(biāo),N=a=6 378 137.0 m(赤道半徑);b= 6 356 752.314 2 m(極點半徑);e=8.181 919 084 262 2×102(離心率),利用WPF技術(shù)繪制頂點并添加貼圖,完成虛擬地球模型的構(gòu)建,并基于該虛擬地球模型實現(xiàn)大規(guī)模地形的可視化。
1.3 World Wind瓦片組織模型
大規(guī)模地形可視化中所使用的紋理數(shù)據(jù)、高程數(shù)據(jù)大多是跨度大、分辨率高的地理信息數(shù)據(jù),數(shù)據(jù)量大,不能全部存儲在內(nèi)存中[13]。為了提高地形場景的渲染效率,本文依照World Wind瓦片金字塔結(jié)構(gòu)進行地形數(shù)據(jù)的切分。
World Wind瓦片組織模型以地球360°經(jīng)度和180°緯度為標(biāo)準(zhǔn),以緯度為-90°、經(jīng)度為0°的點為起始點,將整個地球劃分網(wǎng)格[14]。在構(gòu)建瓦片金字塔時,首先將原始數(shù)據(jù)設(shè)置為最高層,之后每降低一個層級就將前一層級2×2個像素點合并成為一個像素點,如此反復(fù),構(gòu)建出瓦片金字塔[15],任何一張瓦片都可以用這張瓦片所在的層級、列號、行號唯一確定。World Wind的瓦片組織模型如圖1所示。
圖1 World Wind的瓦片組織模型
切分后的地形數(shù)據(jù)可以按照 “D:Root433_2.a(chǎn)bc” 的形式存儲在本地,該路徑所代表的含義是“磁盤根目錄數(shù)據(jù)根目錄層級行號行號_列號.后綴名”。瓦片的層級、行列號與經(jīng)緯坐標(biāo)存在對應(yīng)關(guān)系。通過計算可以實現(xiàn)瓦片的層級、行列號與經(jīng)緯度區(qū)間的相互轉(zhuǎn)化,轉(zhuǎn)換公式如式(4)~(7)所示。
式中,lat和lon分別代表緯度和經(jīng)度;row和col分別代表瓦片所在的行和列,lztd為第0層瓦片的分割度數(shù)(一般為36°)。
游戲循環(huán)能夠根據(jù)輸入、AI(artificial intelligence)或其他主觀邏輯來確定游戲下一階段的行為,其任務(wù)是調(diào)用其他邏輯函數(shù),并核查某種條件是否已滿足[16]。本文設(shè)計了一種基于游戲循環(huán)的框架,框架的基本思想是:將實現(xiàn)可視化的各個函數(shù)放在一個主循環(huán)中,實時監(jiān)聽場景信息的變化,并根據(jù)場景信息的變化動態(tài)更新三維場景。
本文提出的可視化框架主要分為3個模塊:用戶接口、場景更新、場景重構(gòu)。其中,用戶接口用于接收用戶輸入的信息,并根據(jù)輸入信息更改攝像機狀態(tài)、觸發(fā)場景信息的改變,將實時的可視化結(jié)果呈現(xiàn)給用戶。場景更新用于捕獲改變的場景信息,并根據(jù)最新的場景信息對瓦片模型進行調(diào)度,生成新的瓦片模型列表。場景重構(gòu)的主要作用是捕獲模型列表的改變,并根據(jù)模型列表的變化生成新的瓦片模型或者刪除舊的瓦片模型,實現(xiàn)三維場景的重構(gòu),具體框架如圖2。
圖2 基于游戲循環(huán)的可視化框架
利用該框架能夠?qū)崟r接收用戶輸入的信息,并根據(jù)硬件的性能按照一定的頻率對三維場景進行更新,忽略一些不必要的變化細節(jié),提升了程序的性能,穩(wěn)定了三維場景的幀數(shù),提升了展示效果。同時,循環(huán)執(zhí)行的代碼也能提高代碼的重用率,降低代碼的冗余度。
基于WPF實現(xiàn)大規(guī)模地形可視化的主要功能包括自由攝像機、瓦片模型調(diào)度、瓦片模型生成。
3.1 自由攝像機
自由攝像機要求三維場景的攝像機能夠根據(jù)用戶鍵盤、鼠標(biāo)輸入的信息完成各種動作,實現(xiàn)對三維場景的自由瀏覽。自由攝像機的動作主要是由平移、縱傾、橫擺、旋轉(zhuǎn)等基本動作組合而成,具體操作如下:
1)平移。平移分為水平平移和豎直平移兩種,水平平移改變視野中心的位置,豎直平移改變攝像機的海拔高度。由于本文的可視化是在虛擬地球上實現(xiàn)的,所以,水平平移實際上是由攝像機分別繞空間直角坐標(biāo)系的X軸和Y軸的旋轉(zhuǎn)組合來實現(xiàn)。當(dāng)用戶進行水平平移操作時,假設(shè)平移前后視野中心點的經(jīng)緯度差值分別為Δlon和Δlat,將攝像機位置繞X軸旋轉(zhuǎn)Δlon度、繞Y軸旋轉(zhuǎn)Δlat 度,便實現(xiàn)了攝像機的水平平移,主要代碼如下:
rotateAround=new Point3D(0,0,0);//旋轉(zhuǎn)中心點為坐標(biāo)原點
Vector3D relaPosition= rotateAround - CameraPosition;//構(gòu)建原始攝像機位置向量
var q1 = new Quaternion(AxisX, Δlat);//利用四元數(shù)實現(xiàn)繞X軸旋轉(zhuǎn)Δlat度
var q2 = new Quaternion(AxisY, Δlon);// 利用四元數(shù)實現(xiàn)繞Y軸旋轉(zhuǎn)Δlon度
Quaternion q = q1 * q2;//將兩個旋轉(zhuǎn)操作組合起來
var m = new Matrix3D();
m.Rotate(q);//利用組合后的四元數(shù)構(gòu)建一個旋轉(zhuǎn)矩陣Vector3D
newRelaPosition = m.Transform(relaPosition);//利用旋轉(zhuǎn)矩陣對原始攝像機位置向量進行旋轉(zhuǎn)操作,得到平移后,最新的攝像機位置為(newRelaPosition.X, newRelaPosition.Y, newRelaPosition.Y)
豎直平移時,由于可視化過程是在虛擬地球上進行的,所以豎直方向從攝像機的位置出發(fā)指向地心。假設(shè)攝像機在豎直方向上的位移為d,豎直平移后最新攝像機的位置可以根據(jù)公式(8)計算出來:
式中,X、Y、Z為攝像機原始位置空間坐標(biāo)值;X1、Y1、Z1為攝像機最新位置,Dx、Dy、Dz為豎直方向上的位移在空間坐標(biāo)軸3個方向上的分量。
2)縱傾橫擺。縱傾與橫擺通過更改LookDirection向量的終點來實現(xiàn),當(dāng)終點在X軸上移動時能夠?qū)崿F(xiàn)橫擺動作,當(dāng)終點在Y軸上移動時便實現(xiàn)了縱傾動作。
3)旋轉(zhuǎn)。旋轉(zhuǎn)動作主要是根據(jù)用戶輸入將攝像機的UpDirection繞LookDirection旋轉(zhuǎn)來實現(xiàn)。假設(shè)旋轉(zhuǎn)角度為Δlat ,則根據(jù)以下代碼執(zhí)行:
用戶可以通過鼠標(biāo)、鍵盤等外設(shè)輸入來控制攝像機完成以上3種基本動作,對這3種基本動作進行組合就能夠?qū)崿F(xiàn)對攝像機的各種控制。
3.2 瓦片模型調(diào)度
在大規(guī)模地形可視化展示中,場景信息的變化會改變屏幕所能觀察到的經(jīng)緯度區(qū)域。為顯示該區(qū)域,可以通過建立同屏幕視域等大的邊界盒(bounding box,BBOX)來對瓦片模型進行調(diào)度,主要步驟如下:
1)確定場景范圍。根據(jù)邊界盒的最大經(jīng)度、最大緯度以及最小經(jīng)度、最小緯度,得出邊界盒的右上角坐標(biāo)和左下角的經(jīng)緯度坐標(biāo),利用公式(4)、(5)求出邊界盒的右上角和左下角在World Wind的瓦片組織系統(tǒng)中的編號。并據(jù)此計算出包圍盒內(nèi)所有瓦片的編號,生成當(dāng)前場景范圍內(nèi)所有瓦片的編號列表。
2)確定待加載/待刪除瓦片列表。遍歷步驟1中得到的當(dāng)前場景范圍內(nèi)所有瓦片編號列表的副本,與上一場景所有瓦片編號列表作匹配,如果當(dāng)前的瓦片在兩個列表中都存在則兩個列表都刪除這個瓦片。遍歷完畢后,副本列表中剩余的瓦片即為當(dāng)前場景待加載的瓦片,這個副本列表即為新的待加載瓦片列表,上一場景瓦片編號列表中剩余的瓦片列表即為待刪除瓦片,這個列表即為待刪除瓦片列表。
3.3 瓦片模型生成
生成瓦片模型的基本思路是:將按照金字塔模型進行切分后的影像數(shù)據(jù)與目標(biāo)區(qū)域的高程數(shù)據(jù)進行疊加,生成具有地形起伏的三維模型。主要步驟如下:
1)坐標(biāo)系的轉(zhuǎn)化。WPF提供MeshGeometry3D類構(gòu)造三維模型,但該類僅支持傳統(tǒng)的三維空間坐標(biāo)系,而瓦片模型是在虛擬地球上生成的,所以模型中頂點位置和范圍等參數(shù)都是由經(jīng)緯度度量得到。因此,在生成瓦片模型的過程中,需要通過式(1)~(3)將地理坐標(biāo)轉(zhuǎn)化為三維空間坐標(biāo)。
2)建立頂點索引。在繪制三角形網(wǎng)格時,相鄰的三角形頂點會重復(fù)繪制。為了提高運行效率,減少重復(fù)繪制頂點造成的系統(tǒng)資源浪費,可以利用MeshGeometry3D提供的TriangleIndices屬性為每個頂點指定唯一索引值。為三角形網(wǎng)格的所有頂點指定索引的方法如下:
圖3 頂點索引
三角形網(wǎng)格是由多個正方形單元格構(gòu)成的,每個正方形單元格的頂點索引如圖3。三角網(wǎng)格t1由索引為index1、index2、index3的點構(gòu)成,三角網(wǎng)格t2由索引為index2、index3、index4的點構(gòu)成,假設(shè)該正方形單元格左上角的點在第row行、第col列,網(wǎng)格的大小為150×150,則index1、index2、index3、 index4的索引分別為然后將構(gòu)成這兩個三角網(wǎng)格的6個頂點索引按三角形構(gòu)成順序存入索引列表TriangleIndices中。最后遍歷所有的行和列,指定整個三角形網(wǎng)格的頂點索引。
3)添加紋理映射。為了使瓦片模型能夠真實地展示地形地貌特征,需要將瓦片所對應(yīng)的瓦片影像數(shù)據(jù)作為紋理“貼”在瓦片模型表面。如果要保證每個網(wǎng)格點對應(yīng)在紋理圖像正確的位置,需要為構(gòu)成瓦片模型的每個點指定紋理映射,對大小為150×150的頂點網(wǎng)格設(shè)圖像的左上角為第0行、第0列,則第x行、第y列的頂點的紋理映射(u,v)為:
4)疊加高程數(shù)據(jù)。高程數(shù)據(jù)的樣本數(shù)與瓦片的頂點數(shù)通常并不相同,因此需要對高程數(shù)據(jù)進行插值(本文采用雙線性插值),生成一個與瓦片頂點一一對應(yīng)的二維數(shù)組。在對頂點進行坐標(biāo)轉(zhuǎn)化時,將這個高程作為公式(1)~(3)中變量h的值代入,便實現(xiàn)了高程數(shù)據(jù)的疊加。
系統(tǒng)在Visual Studio 2012環(huán)境下開發(fā),測試的計算機硬件配置CPU為Intel(R) Core(TM) i7-2600 3.40 GHz(8 PUs)、內(nèi)存為4 G RAM、顯卡為GeForce GT 420,測試數(shù)據(jù)為北京昌平地區(qū)90 m分辨率的SRTM(shuttle radar topography mission)數(shù)據(jù)和相同地區(qū)的Blue Marble影像數(shù)據(jù),并與目前廣泛采用的World Wind進行對比試驗。
4.1 可視化結(jié)果準(zhǔn)確性分析
為了分析可視化結(jié)果的準(zhǔn)確性,分別在本系統(tǒng)的可視化場景中和World Wind的可視化場景中選擇兩個參照點,如圖4所示。同時記錄下這2個參照點在本系統(tǒng)和World Wind中的經(jīng)緯度坐標(biāo)和高程值,如表1所示。
從表1的對比可以看出,在兩個系統(tǒng)中相同參照點的經(jīng)緯度坐標(biāo)和高程值基本相同;同時觀察圖4可以發(fā)現(xiàn),二者對目標(biāo)區(qū)域的地形地貌展示結(jié)果完全一致,說明本系統(tǒng)所實現(xiàn)的可視化結(jié)果是準(zhǔn)確的。
圖4 可視化結(jié)果對比
表1 可視化結(jié)果對比
4.2 場景幀數(shù)對比
為了對比三維可視化過程是否流暢,分別使用本系統(tǒng)及World Wind實現(xiàn)測試數(shù)據(jù)的可視化,然后使視點在測試數(shù)據(jù)生成的三維場景中按相同的軌跡勻速移動。依照同樣的時間間隔,分別記錄三維場景每秒的傳輸幀數(shù)(frames per second, FPS),如表2所示。
表2 場景幀數(shù)對比
通過對比可以看出,本系統(tǒng)的FPS與World Wind的FPS相差不大,均超過系統(tǒng)流暢運行所要求的30 幀 /s,說明本系統(tǒng)實時的地形三維可視化運行流暢。
針對大規(guī)模地形可視化系統(tǒng)的需求,本文設(shè)計并實現(xiàn)了基于WPF的大規(guī)模地形可視化系統(tǒng)。WPF技術(shù)的運用,使得本系統(tǒng)具有更佳的影像展示效果和友好的用戶界面,且WPF對3D開發(fā)相關(guān)技術(shù)的封裝,使得系統(tǒng)的開發(fā)更加便利,能有效縮短開發(fā)周期。虛擬地球和World Wind瓦片組織系統(tǒng)的應(yīng)用在增加可視化結(jié)果真實性的同時,提升了系統(tǒng)的可擴展性?;谟螒蜓h(huán)的可視化框架,使用戶通過移動攝像機觸發(fā)場景更新時,減少了不必要的處理過程,有效提升了程序的運行效率。實驗表明,系統(tǒng)能夠準(zhǔn)確實時地對目標(biāo)區(qū)域的地形數(shù)據(jù)進行可視化,且運行流暢,具有較高的實用價值,為利用WPF實現(xiàn)大規(guī)模地形可視化提供了新的思路。參考文獻
[1] 閆佳,閆楓.基于XNA的地理信息系統(tǒng)的研究與實現(xiàn)[J].測繪與空間地理信息,2014,37(11):152-154
[2] 羅康.基于OpenGL的3D游戲場景編輯器的設(shè)計與實現(xiàn)[D].成都:西南交通大學(xué),2014
[3] 任雨,朱谷昌,張建國,等.遙感圖像三維可視化在低空磁測飛行輔助設(shè)計中的應(yīng)用[J].遙感信息,2014,29(3):78-81
[4] 王方雄,馬少君.基于ArcEngine的三維地形可視化系統(tǒng)設(shè)計與實現(xiàn)[J].地理空間信息,2011,9(3):38-40
[5] 李爾園,李洪平.基于World Wind的海洋數(shù)據(jù)可視化研究[J].地理空間信息,2015,13(2):25-27
[6] 郭鐘哲,李晶,李茜.基于Skyline的渭河下游洪水演進模擬研究與系統(tǒng)實現(xiàn)[J].水利水電技術(shù),2014,45(10):7-10
[7] 潘忠英.基于OpenGL的三維可視化方法研究[J].計算機與數(shù)字工程,2014,42(3):512-516
[8] 楊芳,黃明,王晏民.基于Direct3D的三維場景漫游系統(tǒng)設(shè)計與實現(xiàn)[J].測繪通報,2014(S1):182-186
[9] 蒲哲,朱名日.基于WPF MVVM的甘蔗種植管理系統(tǒng)[J].計算機與現(xiàn)代化,2014(2):110-114
[10] 霍旭光.基于云計算的大規(guī)模地形數(shù)據(jù)處理方法的研究[D].北京:中國地質(zhì)大學(xué),2013
[11] 張朝忙,劉慶生,劉高煥,等. SRTM 3與ASTER GDEM數(shù)據(jù)處理及應(yīng)用進展[J].地理與地理信息科學(xué),2012,28(5):29-34
[12] 凌東偉,李欣,朱美正.基于GIS的三維虛擬地球的研究與實現(xiàn)[J].計算機工程與設(shè)計,2007,28(19):4 774-4 777
[13] 申勝利,李華,劉聚海.基于ArcSDE的柵格數(shù)據(jù)存儲與處理[J].測繪通報,2007(9):47-49
[15] 鄒紅霞,王文嘉.基于World Wind的WebGIS服務(wù)器研究與實現(xiàn)[J].計算機工程與應(yīng)用,2011,47(8S): 432-438
[16] 朱留果,何衛(wèi)紅,阮曉雨,等.基于World Wind與無人機影像的三維場景重建與漫游研究[J].現(xiàn)代測繪,2012,35(5):48-50
[17] Christopher Griffith. 實戰(zhàn)Flash游戲開發(fā)[M].北京:人民郵電出版社, 2012
P208
B
1672-4623(2016)12-0041-04
10.3969/j.issn.1672-4623.2016.12.014
渠澗濤,碩士研究生,研究方向為空間數(shù)據(jù)處理。
2015-08-06。
項目來源:高分重大專項資助項目(Y4D00100GF、Y4D0100038);中科院戰(zhàn)略先導(dǎo)專項資助項目(Y1Y02230XD)。