吳小東,許捍衛(wèi)
(1.河海大學(xué) 地球科學(xué)與工程學(xué)院,江蘇 南京 210098)
城市三維場(chǎng)景構(gòu)建是“數(shù)字城市”建設(shè)[1]的關(guān)鍵技術(shù)之一。面對(duì)TB級(jí)以上的海量數(shù)據(jù),雖然隨著計(jì)算機(jī)硬件技術(shù)的發(fā)展,在一定程度上緩解了大規(guī)模數(shù)據(jù)渲染的問(wèn)題,但是仍然無(wú)法從根本上解決 “有限的系統(tǒng)資源與無(wú)限大的數(shù)據(jù)量的矛盾”。目前常見的方法是細(xì)節(jié)層次技術(shù)(LOD)和數(shù)據(jù)分頁(yè)技術(shù)。
OpenSceneGraph(簡(jiǎn)稱OSG)是一個(gè)基于工業(yè)標(biāo)準(zhǔn)OpenGL跨平臺(tái)的三維開源場(chǎng)景圖形系統(tǒng)應(yīng)用程序開發(fā)接口(API)。作為一個(gè)高性能的圖形開發(fā)引擎,它在3D程序開發(fā)中扮演著重要角色。OSGEarth是Gleen等人在OSG的基礎(chǔ)上建立的一個(gè)開源項(xiàng)目。OSGEarth在GDAL與OGC的基礎(chǔ)上可以加載眾多來(lái)源的數(shù)據(jù),并且可以加載眾多類型的三維模型數(shù)據(jù),支持不同的數(shù)據(jù)格式,以插件的形式驅(qū)動(dòng)。本文采用OSGEarth,結(jié)合LOD和數(shù)據(jù)分頁(yè)技術(shù)構(gòu)建城市三維場(chǎng)景,為“數(shù)字城市”建設(shè)提供基礎(chǔ)框架。
OSGEarth是基于標(biāo)準(zhǔn)C++和OSG開發(fā)的,采用實(shí)時(shí)的地形數(shù)據(jù)加載和渲染策略[2],具有良好的多源數(shù)據(jù)支持與數(shù)據(jù)管理功能。
OSGEarth目前支持2種類型的視圖:Geocentric是地球Globe視圖,類似Google Earth全球Globe視圖;Projected是平面投影坐標(biāo)系下的Flat視圖,支持多種地理坐標(biāo)和投影坐標(biāo)系統(tǒng)。
OSGEarth采用驅(qū)動(dòng)器的方式來(lái)支持各種GIS數(shù)據(jù)源,它自帶有多種驅(qū)動(dòng)器,如GDAL驅(qū)動(dòng)器,用于處理影像和DEM數(shù)據(jù);TMS驅(qū)動(dòng)器,用于處理采用TMS協(xié)議的瓦片數(shù)據(jù)等。此外,OSGEarth的高擴(kuò)展性使得用戶可以根據(jù)需求自行擴(kuò)展其他類別的驅(qū)動(dòng)器。表1為OSGEarth目前支持的各種驅(qū)動(dòng)器。
表1 OSGEarth的驅(qū)動(dòng)器及其支持的數(shù)據(jù)格式統(tǒng)計(jì)表
OSGEarth采用類似于ArcGIS中圖層的概念來(lái)進(jìn)行各類數(shù)據(jù)的管理,分別有影像層、高程層和模型矢量層等。不同圖層對(duì)應(yīng)不同的數(shù)據(jù)類型。這樣的方式更易于不同分辨率的影像、高程以及模型數(shù)據(jù)的疊加。
LOD(level of detail)是指根據(jù)物體模型的結(jié)點(diǎn)在顯示環(huán)境中所處的位置和重要度,決定物體渲染的資源分配,降低非重要物體的面數(shù)和細(xì)節(jié)度,從而獲得高效率的渲染運(yùn)算[3]。在OSG的場(chǎng)景結(jié)點(diǎn)組織結(jié)構(gòu)中,專門提供了場(chǎng)景結(jié)點(diǎn)osg::LOD來(lái)表達(dá)不同的細(xì)節(jié)層次模型。其中,osg::LOD結(jié)點(diǎn)作為父結(jié)點(diǎn),每個(gè)子結(jié)點(diǎn)作為一個(gè)細(xì)節(jié)層次,設(shè)置不同的視域,在不同的視域下顯示相應(yīng)的子結(jié)點(diǎn)。
在城市三維場(chǎng)景中可以采用數(shù)據(jù)分頁(yè)的方式進(jìn)行動(dòng)態(tài)調(diào)度[4]。這里“分頁(yè)”的意思是隨著視口范圍的變化,場(chǎng)景只加載和渲染當(dāng)前視口范圍內(nèi)數(shù)據(jù),并將離開視口范圍內(nèi)的數(shù)據(jù)清除出內(nèi)存(可以設(shè)定不同的數(shù)據(jù)卸載策略),不再渲染。保證內(nèi)存中只有有限的數(shù)據(jù)量,場(chǎng)景的每一幀也只有有限的數(shù)據(jù)被送到圖形渲染管道,從而提高渲染性能。OSG源代碼中提供PagedLOD來(lái)進(jìn)行模型的動(dòng)態(tài)調(diào)度。在不同的視域下,PagedLOD動(dòng)態(tài)讀取不同細(xì)節(jié)層次的結(jié)點(diǎn)模型,實(shí)現(xiàn)了分頁(yè)LOD顯示。OSG內(nèi)部采用osgDB::DatabasePager類來(lái)管理場(chǎng)景結(jié)點(diǎn)的動(dòng)態(tài)調(diào)度,場(chǎng)景循環(huán)每一幀的時(shí)候,會(huì)將一段時(shí)間內(nèi)不在當(dāng)前視圖范圍內(nèi)的場(chǎng)景子樹卸載掉,并加載新進(jìn)入到當(dāng)前視圖范圍的新場(chǎng)景子樹。OSG采用了多線程的方式來(lái)完成上述工作。
3.1.1 地形數(shù)據(jù)組織方式
OSGEarth采用動(dòng)態(tài)四叉樹LOD方式進(jìn)行地形數(shù)據(jù)的組織,地形數(shù)據(jù)被實(shí)時(shí)地劃分為不同LOD層次瓦片序列,基于視點(diǎn)進(jìn)行動(dòng)態(tài)、分頁(yè)的調(diào)度和渲染。整個(gè)地形場(chǎng)景是一棵瓦片化的四叉樹(如圖1所示),四叉樹低層次(低精度)的影像是從高層次(高精度)的影像上實(shí)時(shí)重采樣獲取的,這種四叉樹的組織方式,理論上可以支持無(wú)限的數(shù)據(jù)量負(fù)載。
圖1 基于四叉樹LOD地形設(shè)計(jì)
3.1.2 數(shù)據(jù)的瓦片切割
OSGEarth采用GDAL進(jìn)行影像數(shù)據(jù)的處理,當(dāng)影像數(shù)據(jù)達(dá)到GB級(jí)甚至TB級(jí)以上時(shí),影像的實(shí)時(shí)處理(讀寫、坐標(biāo)變換、瓦片化等)就會(huì)變得異常緩慢,雖然可采用預(yù)設(shè)金字塔等方式來(lái)加快影像的處理,但仍不能滿足地形實(shí)時(shí)渲染的需求。為此,在進(jìn)行地形三維場(chǎng)景構(gòu)建時(shí)需要對(duì)影像和DEM數(shù)據(jù)進(jìn)行預(yù)先瓦片分割處理[6],瓦片切割的規(guī)范可以采用TMS、TileCache等。
TMS即瓦片地圖服務(wù)(tile map server),是OSGeo(開源空間信息基金會(huì))發(fā)布的一種地圖瓦片規(guī)范。它將影像按照瓦片切割的規(guī)則,按不同分辨率切分成一系列的地圖瓦片,以增強(qiáng)其訪問(wèn)速度。圖2為TMS瓦片的切割方式。
圖2 TMS瓦片的切割方式
本文采用圖像瓦片切割軟件MapTiler對(duì)影像和DEM進(jìn)行TMS切割,切割的瓦片尺寸直接影響到地形動(dòng)態(tài)創(chuàng)建的效率。一般影像瓦片大小設(shè)置為256×256,DEM瓦片大小設(shè)置為32×32。分割好的瓦片數(shù)據(jù)可以在本地或者基于Web的方式發(fā)布,供OSGEarth調(diào)用。如圖3所示,采用TMS瓦片切割方式,將切割后的TMS影像瓦片和DEM瓦片渲染為三維場(chǎng)景效果。
圖3 三維地形
地物建筑物模型的三維表達(dá)是城市三維可視化的一個(gè)重要組成部分,面對(duì)著海量的建筑物模型,需要合適的組織與調(diào)度才能實(shí)現(xiàn)流暢的渲染。
基于“瓦片分割”的思想,本文將海量的地物建筑物數(shù)據(jù)進(jìn)行瓦片分割,按照矩形區(qū)域?qū)⒔ㄖ锬P蛣澐譃橐粋€(gè)個(gè)的矩形瓦片結(jié)點(diǎn),并設(shè)置多個(gè)LOD層級(jí),不同LOD層次對(duì)應(yīng)的瓦片結(jié)點(diǎn)的尺寸不同,上一LOD層次的瓦片結(jié)點(diǎn)尺寸為下一級(jí)的1倍。對(duì)應(yīng)的地物建筑物模型的細(xì)節(jié)層次也不同,瓦片結(jié)點(diǎn)尺寸越大,對(duì)應(yīng)的模型細(xì)節(jié)層次就越低。每一個(gè)瓦片結(jié)點(diǎn)對(duì)應(yīng)著一塊矩形區(qū)域,包含位于這個(gè)矩形區(qū)域的所有建筑物模型。不同層級(jí)的瓦片結(jié)點(diǎn)對(duì)應(yīng)著不同細(xì)節(jié)層次的建筑物模型,金字塔的頂端是最簡(jiǎn)化的建筑物模型,金字塔底端對(duì)應(yīng)最精細(xì)的建筑物模型。
圖4 地物瓦片劃分
具體的算法步驟如下:
1) 確定數(shù)據(jù)區(qū)域的矩形坐標(biāo)范圍,作為第1個(gè)細(xì)節(jié)層級(jí)的瓦片結(jié)點(diǎn),讀取該LOD層次下的所有建筑物模型,設(shè)定該瓦片結(jié)點(diǎn)的視域范圍,如0~10 000 m。
2)上一瓦片結(jié)點(diǎn)被細(xì)分成4個(gè)新的瓦片結(jié)點(diǎn),如圖4左圖所示,分別確定4個(gè)瓦片結(jié)點(diǎn)的坐標(biāo)范圍,根據(jù)每個(gè)瓦片結(jié)點(diǎn)的坐標(biāo)范圍,讀取該LOD層次下的所有建筑物模型,并設(shè)定每個(gè)瓦片結(jié)點(diǎn)的視域,如0~8 000 m。
3) 再次遞歸將上一級(jí)的4個(gè)瓦片結(jié)點(diǎn)分別細(xì)分成4個(gè)新的瓦片結(jié)點(diǎn)(共16個(gè)瓦片結(jié)點(diǎn)),如圖4右圖所示,重復(fù)上述操作,直到四叉樹劃分完畢。
4) 將生成的四叉樹模型保存,程序結(jié)束。
在實(shí)際的城市三維可視化建設(shè)中,地物建筑物建模和地形建模一般是分開進(jìn)行的。地物建筑物的建模一般是根據(jù)底面精確的地理坐標(biāo)和模型的高度采用建模軟件或其他自動(dòng)化建模方法完成[7],在建模的過(guò)程中沒(méi)有考慮地形的影響,也就是說(shuō)模型底面是不帶高程的。而地形建模,無(wú)論是采用tin還是grid的方式,都只是對(duì)真實(shí)地形的一個(gè)近似模擬,在構(gòu)建地形的過(guò)程中一般也沒(méi)有考慮地表地物的影響。這樣,當(dāng)?shù)匦魏偷匚镞M(jìn)行匹配融合的時(shí)候就會(huì)造成地物建筑物模型陷入地面以下或者懸浮到空中。這就需要進(jìn)行地物與地形融合,具體流程如圖5所示。
為了實(shí)現(xiàn)地物與地形的融合,需要獲取地物中心點(diǎn)XY坐標(biāo)下的地形高程Z值,然后根據(jù)Z值將地物抬高到地形表面。地物模型的中心點(diǎn)所處的高程Z值的獲取方法是射線求交[8],這種方法在三維場(chǎng)景虛擬現(xiàn)實(shí)中有大量的應(yīng)用,如碰撞檢測(cè)等[9],其原理如圖6所示。
圖6 射線求交
以地心A點(diǎn)(Flat場(chǎng)景下為地物中心正下方地下6 000 km一點(diǎn))為起始點(diǎn),連接地物建筑物中心點(diǎn)B,形成射線,與地形相交于C點(diǎn),這個(gè)C點(diǎn)即為地物地面中心點(diǎn)的實(shí)際位置。通過(guò)坐標(biāo)變換矩陣,將地物的位置偏移抬高到C點(diǎn),完成地物與地形的融合。
結(jié)合本文研究及泰州市相關(guān)數(shù)據(jù),集成OSGEarth與MFC,完成泰州市城市三維場(chǎng)景相關(guān)建設(shè),實(shí)現(xiàn)導(dǎo)航、鷹眼、距離測(cè)量、路徑漫游、汽車漫游、地球Globle漫游等三維場(chǎng)景漫游功能,場(chǎng)景光照、場(chǎng)景霧效、天空背景、場(chǎng)景顏色等場(chǎng)景管理功能及“布告板”技術(shù)下的文字地名標(biāo)注功能(如圖7所示)。該系統(tǒng)中一共加載了20 000多個(gè)3DS格式的城市建筑物模型、地形及影像數(shù)據(jù),在配置NVIDIA GT540M顯卡的機(jī)器下測(cè)試,平均幀速在40以上,而一般幀速達(dá)到15以上就可以流暢地渲染,取得了良好的渲染性能。
圖7 泰州市城市三維場(chǎng)景
本文研究OSGEarth中三維地形與地物的組織與調(diào)度、地形與地物融合問(wèn)題,并以泰州市為例,構(gòu)建了基于OSGEarth的城市三維場(chǎng)景,實(shí)現(xiàn)了大規(guī)模地形、地物的實(shí)時(shí)漫游顯示, 在此基礎(chǔ)上進(jìn)行空間數(shù)據(jù)的分析與查詢,便可建立真正的三維城市地理信息系統(tǒng), 如與ArcGIS Server相結(jié)合,構(gòu)建二三維一體化的GIS系統(tǒng),為“數(shù)字城市”和“數(shù)字地球”空間信息平臺(tái)的搭建提供基礎(chǔ)框架。
[1]朱慶,李德仁,龔健雅,等.數(shù)碼城市GIS的設(shè)計(jì)與實(shí)現(xiàn)[J].武漢大學(xué)學(xué)報(bào):信息科學(xué)版,2001,26(1):8-11,17
[2]王銳,錢學(xué)雷.OpenSceneGraph 三維渲染引擎設(shè)計(jì)與實(shí)現(xiàn)[M].北京:清華大學(xué)出版社,2009
[3]趙敬紅. 基于OpenSceneGraph的大地形可視化方法研究[D].長(zhǎng)沙:中南大學(xué),2009
[3]武玉國(guó),杜瑩.大規(guī)模地形TIN模型的LOD算法設(shè)計(jì)與實(shí)現(xiàn)[J].系統(tǒng)仿真學(xué)報(bào),2005,17(3) :665-669
[4]翟巍. 三維GIS中大規(guī)模場(chǎng)景數(shù)據(jù)獲取、組織及調(diào)度方法的研究和實(shí)現(xiàn)[D]. 大連:大連理工大學(xué),2003
[5]張昊.基于OSG的交通場(chǎng)景三維實(shí)時(shí)仿真平臺(tái)研究與實(shí)現(xiàn)[D].長(zhǎng)沙:中南大學(xué),2010
[6]伏寶光, 嚴(yán)紅平.OpenSceneGraph的大地形可視化方法研究[J].軟件導(dǎo)刊, 2010(3):176-178
[7]許捍衛(wèi). 基于Sketchup的城市三維建模技術(shù)[J].測(cè)繪科學(xué),2011(1):213-214,189
[8]張輝.基于地理坐標(biāo)框架下的地物與地形匹配解決方案研究[J].測(cè)繪科學(xué),2007(3):90-92,137
[9]萬(wàn)定生.基于OSG的水利工程三維可視化系統(tǒng)研究與應(yīng)用[J].計(jì)算機(jī)與數(shù)字工程,2009(4):135-137