李春林+魏廣群+蔣利利+粟藝峰
【摘 要】隨著數(shù)字地球的發(fā)展,LOD技術(shù)在場景展示中的作用愈加凸顯。本文通過對可視化技術(shù)的研究,以O(shè)SG為基礎(chǔ)渲染引擎,通過OSGEarth完成基礎(chǔ)平臺搭建,構(gòu)建出虛擬三維可視化系統(tǒng)平臺。該平臺完成了對基礎(chǔ)數(shù)據(jù)的添加,包括矢量數(shù)據(jù),影像數(shù)據(jù),數(shù)字高程模型數(shù)據(jù)。然后基于LOD技術(shù)實(shí)現(xiàn)矢量點(diǎn)標(biāo)注信息的添加,可以根據(jù)視點(diǎn)位置的不同瀏覽相應(yīng)視域內(nèi)的矢量點(diǎn)信息。
【關(guān)鍵詞】OSGEarth;LOD;Sqlite數(shù)據(jù)庫
中圖分類號: TP311.52 文獻(xiàn)標(biāo)識碼: A 文章編號: 2095-2457(2017)23-0001-003
【Abstract】With the development of digital earth,the role of LOD in scene display becomes more and more prominent. In this paper,through the research of visualization technology, based on OSG rendering engine,OSGarth completed the basic platform to build a virtual three-dimensional visualization system platform.The platform completed the basic data to add,including vector data,image data,digital elevation model data.Then based on the LOD technology to achieve the addition of vector point annotation information,you can view the corresponding point of view of the vector point information according to the different point of view.
【Key words】OSGEarth;LOD;Sqlite database
0 引言
二十世紀(jì)九十年代后期,“數(shù)字地球”開始進(jìn)入人們的視野。數(shù)字地球的核心內(nèi)容是采用虛擬的三維場景模擬真實(shí)的地球,并通過加載影像,地形以及多種模型數(shù)據(jù)進(jìn)行現(xiàn)實(shí)世界的仿真。在虛擬的三維地球中將所有信息數(shù)字化,實(shí)現(xiàn)人與數(shù)字地球的交互,使人們能夠快速獲取地球任意位置的有用信息[1]。基于數(shù)字地球人們不僅可以對地球有限的資源進(jìn)行合理利用,還能對環(huán)境進(jìn)行多方面保護(hù),對人們的工作生活提供諸多便利。
1 OSG及OSGEarth簡介
1.1 OSG簡介
OpenSceneGraph (簡稱OSG)是一款開源的三維渲染引擎,其核心功能主要分為場景管理和圖形渲染兩大類[2]。因其強(qiáng)大的圖形渲染性能,OSG在虛擬現(xiàn)實(shí),仿真,三維可視化等方面得到較為廣泛的應(yīng)用。它使用C++編寫,封裝了OpenGL API,因此具有較強(qiáng)的跨平臺性,可運(yùn)行于Windows、UNIX 、Linux等操作系統(tǒng)之上。OSG之所以被程序開發(fā)者普遍看好,不僅源于它強(qiáng)大的性能支撐,更源于它的開源性。程序開發(fā)者可以修改OSG源代碼,實(shí)現(xiàn)自己所需要的功能。
OSG將場景渲染抽象出來,提出了場景樹和渲染樹的概念。場景樹,顧名思義即采用樹形結(jié)構(gòu)來組織場景中的地物。與傳統(tǒng)的四叉樹數(shù)據(jù)結(jié)構(gòu)類似,場景樹同樣包含一個根節(jié)點(diǎn),不同的是,場景樹中節(jié)點(diǎn)的子節(jié)點(diǎn)不再四分,而是可以包含任意個數(shù)的子節(jié)點(diǎn),提高了加載調(diào)度效率。渲染樹由狀態(tài)集(StateSet)和渲染葉(RenderLeaf)節(jié)點(diǎn)組成。OSG可以同時渲染StateSet相同的RenderLeaf并可以在不同的StateSet之間任意切換。
1.2 OSGEarth簡介
OSGEarth是基于OSG三維渲染引擎開發(fā)的一款開源地形、模型數(shù)據(jù)加載渲染的軟件開發(fā)包(Software Development Kits,簡稱SDK)。它可以從網(wǎng)絡(luò)或者本地獲取地形數(shù)據(jù)和影像數(shù)據(jù),并實(shí)時地進(jìn)行優(yōu)化、構(gòu)建和顯示,支持多數(shù)據(jù)源的加載和管理[3]。OSG Earth使用基于XML格式的配置文件,可以從系統(tǒng)外部讀取本地文本文件加載地球數(shù)據(jù),開發(fā)人員可以手動配置文本文件加載自己所需要的數(shù)據(jù),具有較強(qiáng)的靈活性。通過不同的場景圖層加載調(diào)度用戶所添加的數(shù)據(jù),便于數(shù)據(jù)管理。OSG Earth提供數(shù)據(jù)緩存機(jī)制,可以將第一次加載的數(shù)據(jù)以緩存的形式保存到本地,第二次加載時先讀取緩存數(shù)據(jù),提高了數(shù)據(jù)加載的效率。
OSGEarth加載數(shù)據(jù)源的方式是通過加載不同的數(shù)據(jù)源驅(qū)動來完成的。比如,通過調(diào)用GDAL驅(qū)動加載影像和DEM數(shù)據(jù);調(diào)用TMS服務(wù),加載基于 TMS 協(xié)議的瓦片數(shù)據(jù);調(diào)用ArcGIS驅(qū)動器,加載顯示ArcGIS Server所發(fā)布的數(shù)據(jù)。此外,OSGEarth具有較強(qiáng)的擴(kuò)展性,用戶可以基于OSGEarth編寫自己的數(shù)據(jù)源驅(qū)動加載相應(yīng)的數(shù)據(jù),比如編寫WMTS驅(qū)動,加載天地圖服務(wù)數(shù)據(jù)。
2 Sqlite數(shù)據(jù)庫
SQLite是一款輕型的數(shù)據(jù)庫,是遵守ACID的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),它包含在一個較小的C庫中。它是D.RichardHipp建立的公有領(lǐng)域項目。以嵌入式作為其設(shè)計目標(biāo),現(xiàn)在已經(jīng)有很多不同的嵌入式軟件產(chǎn)品,占用資源很少,在嵌入式設(shè)備中,大概只占用幾百kb的內(nèi)存即可。它對主流的操作系統(tǒng),比如Linux、Unix、Windows等,都能夠很好的支持。同時還能夠和Tcl、Java、PHP、C#等很多程序語言相結(jié)合。而且和MySQL、PostgreSQL這兩款世界領(lǐng)先的開源軟件相對比來看,它的處理速度明顯較快。endprint
3 LOD算法
在大部分的GIS項目中,加載海量的地形數(shù)據(jù),模型數(shù)據(jù)等是必不可少的。但是受電腦性能和內(nèi)存的限制,對于海量數(shù)據(jù),無法一次性加入內(nèi)存。即便實(shí)現(xiàn)了加載海量數(shù)據(jù),在場景瀏覽時也會出現(xiàn)卡頓現(xiàn)象。層次細(xì)節(jié)技術(shù)(Level of Detail,簡稱LOD)對于加快模型顯示速度,及降低場景復(fù)雜度非常有效[4]。在場景中的各個不同部分或一個整體場景中獲得一組由具有不同細(xì)節(jié)的描述方法而得到的一組模型,用于在場景繪制時以供選擇使用,即層次細(xì)節(jié)模型。對于同一事物,由于受到人眼的視覺特征的影響,位于遠(yuǎn)近不同位置的物體,目視所能夠看到的物體的細(xì)節(jié)程度是完全不一樣的。根據(jù)人眼視覺差異的這一特點(diǎn),對于場景中同一物體,LOD技術(shù)便會依據(jù)詳細(xì)程度的不同創(chuàng)建一組幾何模型。在場景渲染的過程當(dāng)中,根據(jù)物體所在的位置選擇相應(yīng)詳細(xì)程度的模型載入場景。即當(dāng)視點(diǎn)距離物體較近時載入在視口內(nèi)的較精細(xì)的模型部分,反之,當(dāng)視點(diǎn)距離物體較遠(yuǎn)時載入在視口內(nèi)的較粗糙的模型部分。在快速繪制復(fù)雜3D場景、模擬飛行器、VR、3D 動畫和交互可視化等領(lǐng)域,LOD模型技術(shù)得到廣泛且深入的應(yīng)用。
在三維場景中由網(wǎng)格生成的細(xì)節(jié)層次模型 LOD,理論上一般分為靜態(tài)和動態(tài)這兩類層次細(xì)節(jié)模型。靜態(tài)層次細(xì)節(jié)模型將模型網(wǎng)格結(jié)構(gòu)的構(gòu)建和繪制兩個板塊分開,在模型的預(yù)處理階段劃分模型數(shù)據(jù),并為各個模型塊構(gòu)建相對應(yīng)的不同細(xì)節(jié)層次的模型存儲在計算機(jī)的外部存儲空間供渲染時使用。根據(jù)視點(diǎn)的位置信息和視角方向,在模型繪制階段進(jìn)行細(xì)節(jié)層次的調(diào)度。而動態(tài)細(xì)節(jié)層次模型依據(jù)視點(diǎn)的坐標(biāo)以及其他信息,在繪制階段實(shí)時生成細(xì)節(jié)層次相異的模型網(wǎng)格,保證了不同層次結(jié)構(gòu)模型之間的連續(xù)性,也叫做連續(xù)的層次細(xì)節(jié)模型。
3.1 靜態(tài)層次細(xì)節(jié)模型
LOD技術(shù)發(fā)展初期,靜態(tài)層次細(xì)節(jié)模型被廣泛應(yīng)用[5]。在應(yīng)用程序運(yùn)行之前,以一定步驟的化簡方式,從最初的高精度模型開始,逐步生成一系列越來越粗糙的模型,并在外部存儲設(shè)備當(dāng)中保存下來。在應(yīng)用程序運(yùn)行過程當(dāng)中,程序根據(jù)屏幕視點(diǎn)與場景中模型的距離,動態(tài)判斷選擇一個合適的細(xì)節(jié)精細(xì)程度的模型,然后加載到場景當(dāng)中以用于顯示。由于所加載的模型都是預(yù)先生成到本地的,所以加載速度較快保證了渲染的流暢性。但是有利便會有弊,隨之而來的便是靜態(tài)層次細(xì)節(jié)模型的兩個較大缺點(diǎn),一是,靜態(tài)LOD需要存儲多個獨(dú)立的簡化模型,數(shù)量龐大的地形模型數(shù)據(jù)的存儲對計算機(jī)硬件標(biāo)準(zhǔn)的要求很高。二是,原始模型是按不同級別生成的簡模,不同級別的模型在場景當(dāng)中切換時可能會出現(xiàn)跳動的現(xiàn)象,即瀏覽模型時不平滑。
3.2 動態(tài)層次細(xì)節(jié)模型
Lindstorm 提出的視點(diǎn)相關(guān)的動態(tài)層次細(xì)節(jié)模型,對于提高層次細(xì)節(jié)模型的應(yīng)用范圍具有重大意義。模型數(shù)據(jù)存儲使用特定的數(shù)據(jù)結(jié)構(gòu),并且不生成可顯示的細(xì)節(jié)模型,此為動態(tài)LOD模型和靜態(tài)細(xì)節(jié)層次模型的一大區(qū)別。在應(yīng)用程序運(yùn)行階段,讓不同精細(xì)程度的層次細(xì)節(jié)模型匹配不同位置視點(diǎn),實(shí)現(xiàn)自動實(shí)時構(gòu)建。通過動態(tài) LOD 建立的模型數(shù)據(jù)冗余小,并且更符合人類的視覺感官特性,也就是所觀察到的不同精細(xì)程度的模型是連續(xù)變化的,避免了畫面跳躍感和幾何數(shù)據(jù)的不一致。但是不同分辨率的模型需要在繪制階段實(shí)時計算生成和更新,消耗了額外的時間,并且算法也相對復(fù)雜,導(dǎo)致了可視化的速度下降。如何選擇適當(dāng)?shù)膬?yōu)化算法,使得畫面效果和繪制速度之間達(dá)到一個平衡點(diǎn),是很多研究者努力的方向。
層次表示法、漸近網(wǎng)格表示法這兩類算法,是目前動態(tài)LOD模型的主要生成算法。
層次表示法是指依據(jù)模型的精細(xì)程度,將精細(xì)模型均勻地化簡為幾個特征較為明顯的簡模,并一次性的存儲到內(nèi)存當(dāng)中。在計算機(jī)的逐幀場景渲染過程中,從存儲簡化模型的內(nèi)存中得到一個所需的細(xì)節(jié)精度稍高的模型,依據(jù)重要程度把內(nèi)存里的的三角形面模型逐個刪除,直到達(dá)到所需的細(xì)節(jié)層次。這種動態(tài)化簡方法,其實(shí)質(zhì)也即一種靜態(tài)化簡法。在預(yù)處理的關(guān)鍵幀模型生成階段,所有的計算都在此時進(jìn)行,以至實(shí)時化簡的計算量極大降低,實(shí)現(xiàn)了動態(tài)化簡的功能[6]。
在眾多的模型實(shí)時化簡技術(shù)中,能夠被大范圍使用的是來自于Microsoft公司的Hoppe提出的漸進(jìn)網(wǎng)格(PM)算法,基于點(diǎn)的剖分操作與邊的折疊操作是其內(nèi)在的核心思想。由于缺乏必要的數(shù)據(jù)結(jié)構(gòu),原來的PM算法,對一個整體場景包含的不同精細(xì)程度的細(xì)節(jié)層次模型無法提供有效的支持。隨著對傳統(tǒng)PM算法的改進(jìn)以及相關(guān)技術(shù)的進(jìn)步,在實(shí)時地形的生成上,獲得人們大量認(rèn)可度的關(guān)于視點(diǎn)的漸進(jìn)網(wǎng)格(VDPM)算法,得到了廣泛應(yīng)用。
漸進(jìn)網(wǎng)格算法首先使用邊折疊的模型化簡方法,以一個全局能量函數(shù)作為依據(jù),從原始模型開始逐步簡化,生成一系列不同精細(xì)程度的模型,最終得到一個最低精細(xì)程度的模型。在精細(xì)化場景模型時,將其過程反轉(zhuǎn),作為簡化過程的逆操作并記錄下來。最終的PM的數(shù)據(jù)結(jié)構(gòu)里僅保存化簡得到的最簡單的、程度最低的場景模型以及生成的一系列有序的逆操作。任意所需精細(xì)程度的簡化模型都可以利用點(diǎn)的剖分操作獲得。
通過對靜態(tài)LOD算法和動態(tài)LOD算法的比較,決定采用動態(tài)LOD算法用于虛擬場景構(gòu)建過程中城市地名標(biāo)注的加載調(diào)度。
4 關(guān)鍵技術(shù)實(shí)現(xiàn)
在SQLite數(shù)據(jù)庫中創(chuàng)建省區(qū)注記表及市區(qū)注記表,用來存儲相關(guān)名稱和經(jīng)緯度坐標(biāo),表結(jié)構(gòu)設(shè)計如下
表1 省區(qū)注記表
表2 市區(qū)注記表
然后在Google地球上提取中國各省市的經(jīng)緯度坐標(biāo)并分別存在省區(qū)數(shù)據(jù)表和市區(qū)數(shù)據(jù)表當(dāng)中。
5 效果展示
基于LOD實(shí)現(xiàn)的全國省市行政區(qū)劃名稱顯示如圖3、圖4所示,當(dāng)鏡頭距離較遠(yuǎn)時,只顯示全國部分省級行政區(qū)劃的名稱,且省級行政區(qū)劃圖標(biāo)在屏幕上基本不會重疊。當(dāng)鏡頭距離較近是顯示市級行政區(qū)劃圖標(biāo)。
6 總結(jié)
本文基于LOD技術(shù)實(shí)現(xiàn)了城市地名標(biāo)注的添加。使在場景瀏覽時避免加載冗余數(shù)據(jù),提高加載渲染效率。對于城市地名標(biāo)注,只在Google地球上提取了我國省級行政中心以及各省各個市中心的地理坐標(biāo),未提取縣級和鄉(xiāng)/鎮(zhèn)級的地理坐標(biāo)。當(dāng)用戶進(jìn)行場景漫游時,無法瀏覽到低級別的行政區(qū)劃。
【參考文獻(xiàn)】
[1]董波.數(shù)字礦山三維地質(zhì)建模及可視化研究[D].中國地質(zhì)大學(xué)(北京),2013.
[2]張昊.基于OSG的道路三維實(shí)時交互式可視化技術(shù)研究[D].中南大學(xué),2010.
[3]王新宇.OpenSceneGraphEarth平臺下KML語言機(jī)制的分析和改進(jìn)[D].西安電子科技大學(xué),2014.
[4]李長春,何榮,王寶山.LOD在大范圍復(fù)雜場景簡化中的應(yīng)用[J].河南理工大學(xué)學(xué)報(自然科學(xué)版),2007(02):181-186.
[5]閆軍,陳震,危水根.基于LOD算法的大規(guī)模地形實(shí)時渲染技術(shù)優(yōu)化[J].電子元器件應(yīng)用,2010(06):86-88.
[6]楊崇源,張繼賢,林宗堅.虛擬地形場景繪制中的實(shí)時LOD算法[J].測繪學(xué)報,2001,(02):133-139.endprint