丁晶,秦亮軍
(廣州市城市規(guī)劃勘測(cè)設(shè)計(jì)研究院,廣東廣州 510060)
移動(dòng)三維地圖作為一種新的地圖應(yīng)用模式,可被簡(jiǎn)單定義為是在各種移動(dòng)終端上,使用三維可視化技術(shù),充分考慮人性化的空間信息的表達(dá)方式,為用戶提供有效的、直觀的移動(dòng)信息服務(wù)的地圖[1]。目前,移動(dòng)三維地圖已成為地理信息服務(wù)的重要方面。
但是現(xiàn)有的大多數(shù)移動(dòng)地圖還只支持二維圖元,或采用平面接合或多面貼圖的技術(shù)生成模型,反映抽象的平面位置信息,真正實(shí)現(xiàn)3D技術(shù)的系統(tǒng)比較少見[2]。實(shí)現(xiàn)移動(dòng)三維地圖的關(guān)鍵就是移動(dòng)環(huán)境下三維場(chǎng)景的實(shí)時(shí)顯示,即必須以一定的刷新頻率實(shí)現(xiàn)場(chǎng)景畫面的連續(xù)性,通常為20幀/秒~30幀/秒,至少不能低于10幀/秒,這個(gè)在桌面系統(tǒng)里已經(jīng)解決的問題是三維地圖轉(zhuǎn)移到移動(dòng)環(huán)境中面臨的難題。
從現(xiàn)有的研究情況看,主要從三個(gè)環(huán)節(jié)尋求解決辦法:一是數(shù)據(jù)從外存儲(chǔ)器到內(nèi)存階段,通過數(shù)據(jù)的有效組織、細(xì)節(jié)層次預(yù)處理、視景體剔除、內(nèi)存的合理調(diào)度等縮短讀數(shù)據(jù)的時(shí)間;二是通過使用傳輸速率高的無線接入IP網(wǎng)絡(luò)的方式提高數(shù)據(jù)傳輸速度,減少用戶等待時(shí)間;三是數(shù)據(jù)在內(nèi)存中的繪制階段,通過多邊形簡(jiǎn)化、多分辨率模型等技術(shù)縮短繪制時(shí)間。實(shí)現(xiàn)城市三維地圖在移動(dòng)設(shè)備上的實(shí)時(shí)顯示時(shí)必須要綜合考慮以上幾個(gè)方面。只有三個(gè)環(huán)節(jié)都得到有效改進(jìn)并且相互協(xié)調(diào),才能突破移動(dòng)環(huán)境硬件資源的限制,滿足應(yīng)用的需要[3]。由于第二環(huán)節(jié)主要靠硬件技術(shù)的突破,因此本文主要從第一、三環(huán)節(jié)入手,考慮數(shù)據(jù)組織和實(shí)時(shí)渲染算法來提高移動(dòng)三維地圖的實(shí)時(shí)顯示速度。
構(gòu)建三維場(chǎng)景所涉及的數(shù)據(jù)主要有:大量的地形數(shù)據(jù)、二維矢量圖形、三維模型數(shù)據(jù)、屬性數(shù)據(jù)、紋理數(shù)據(jù)等。這些數(shù)據(jù)量一般是二維地圖數(shù)據(jù)量的幾十倍甚至是上百倍[4]。對(duì)于桌面環(huán)境的城市三維地圖而言,目前已經(jīng)有非常合理科學(xué)的海量數(shù)據(jù)組織、存儲(chǔ)和管理方案,例如金字塔模型和LOD技術(shù)[5]。本文接下來針對(duì)移動(dòng)環(huán)境中的數(shù)據(jù)組織展開討論,其中LOD模型是實(shí)時(shí)可視化的關(guān)鍵,數(shù)據(jù)分層是地理信息顯示、查詢、分析的前提,數(shù)據(jù)分塊是在數(shù)據(jù)分層的基礎(chǔ)上將場(chǎng)景分割成多個(gè)子場(chǎng)景,這樣在場(chǎng)景中漫游時(shí),當(dāng)前顯示區(qū)域的總數(shù)據(jù)量不會(huì)很大,以保證實(shí)時(shí)瀏覽的連續(xù)流暢。
LOD模型是指根據(jù)不同的顯示對(duì)同一個(gè)物體采用不同精度的幾何描述,物體的細(xì)節(jié)層次越高,則數(shù)據(jù)量越大,描述得越精細(xì);細(xì)節(jié)層次越低,則數(shù)據(jù)量越小,描述得越粗糙。LOD模型在幾何結(jié)構(gòu)上大致可以分離散LOD、連續(xù)LOD和多分辨率LOD。在進(jìn)行場(chǎng)景建模時(shí),由于地物景觀豐富,采用連續(xù)LOD不太現(xiàn)實(shí),我們選擇建立多級(jí)LOD模型。但是,如果LOD層次太多會(huì)導(dǎo)致頻繁地讀取不同細(xì)節(jié)層次模型數(shù)據(jù),影響實(shí)時(shí)繪制的流暢性;LOD層次太少會(huì)導(dǎo)致不同等級(jí)切換有明顯的突變現(xiàn)象。目前,多級(jí)LOD建模并沒有統(tǒng)一標(biāo)準(zhǔn),它和應(yīng)用需求精度、可視化場(chǎng)景的大小以及地物的復(fù)雜程度及聚集程度等密切相關(guān),因此多級(jí)模型的視覺連續(xù)性成為建模時(shí)需要考慮的一個(gè)重要因素。
三維模型的LOD實(shí)質(zhì)上可以理解為城市三維地圖的分辨率,進(jìn)而類似于傳統(tǒng)二維表示的地圖比例尺的概念。因此,對(duì)城市三維模型而言,確定LOD建模需要滿足的原則,對(duì)三維場(chǎng)景的感知和目標(biāo)識(shí)別具有重要意義,簡(jiǎn)單來說可以考慮如下的LOD建模原則:
(1)LOD模型的統(tǒng)一性:三維模型主要是由幾何體和紋理來描述的,而幾何與紋理具有不同的特點(diǎn)來滿足特定應(yīng)用的不同方面要求。所以,任一尺度下的LOD模型,必須明確模型當(dāng)中幾何與紋理的不同特點(diǎn)。
(2)特征的可識(shí)別性:城市三維地圖的應(yīng)用中導(dǎo)航是非常重要的一個(gè)方面,在LOD建模時(shí)使用的幾何結(jié)構(gòu)和紋理要能表現(xiàn)模型的特征,便于用戶進(jìn)行區(qū)域判別[6]。
(3)LOD模型的連續(xù)性:LOD模型的定義本質(zhì)上是一個(gè)連續(xù)的序列,在序列當(dāng)中不同LOD模型之間應(yīng)該具有一定的相關(guān)性,從而保證場(chǎng)景漫游時(shí)不產(chǎn)生明顯的間跳感。
在明確LOD建模原則之后,就需要選擇合適的建模方式。目前城市三維場(chǎng)景建模一般有立即模式和保留模式兩種,以立即模式和手工編碼建立所有的模型對(duì)象會(huì)導(dǎo)致開發(fā)速度很慢并且復(fù)雜;而保留模式允許設(shè)計(jì)者通過使用建模軟件來設(shè)計(jì)并建立三維場(chǎng)景,然后在應(yīng)用程序中直接加載模型數(shù)據(jù),這樣可以提高建模速度和場(chǎng)景渲染速度,本文采用后一種建模方式。
在進(jìn)行數(shù)據(jù)存儲(chǔ)和組織、圖形與屬性數(shù)據(jù)采集等之前必須確定城市三維場(chǎng)景所涉及的所有數(shù)據(jù)的分層規(guī)則,所有工作以此為依據(jù)逐步展開。
在現(xiàn)實(shí)世界中,屬于同一要素類型的地物歸為一個(gè)圖層。一般來說,三維場(chǎng)景中的地物大致可分為地塊、建筑物、樹木、路燈、交通標(biāo)志、其他點(diǎn)狀要素等幾層,每個(gè)地物層中包括若干個(gè)模型類,一個(gè)模型類下面有多個(gè)實(shí)體。這樣,三維場(chǎng)景的模型文件具有大量重復(fù)性的特征,如樹木、路燈、交通標(biāo)志等在場(chǎng)景中的大量重復(fù),在讀取和傳輸?shù)臅r(shí)候只需一次,在顯示的時(shí)候只繪制一次,后面的模型直接利用已讀取好的模型類。每個(gè)模型類包含一個(gè)模型文件,每個(gè)模型的中心均已歸零。通過實(shí)體的中心坐標(biāo)、旋轉(zhuǎn)方向、縮放比例在場(chǎng)景中進(jìn)行定位,各個(gè)實(shí)體各有差異。植被、路燈、港口機(jī)械、建筑等重復(fù)出現(xiàn)無特定地點(diǎn)的模型稱為普通模型,對(duì)于獨(dú)一無二的標(biāo)志性建筑等,該實(shí)體類下面僅僅只有一個(gè)實(shí)體模型。由于三維場(chǎng)景中模型量很大,在程序中讀取和編輯這些模型將非常繁瑣,其命名規(guī)則就尤其重要,這里統(tǒng)一采用“層編碼+編號(hào)”的規(guī)則。
小規(guī)模場(chǎng)景在漫游過程中可以作為一塊來處理,當(dāng)場(chǎng)景數(shù)據(jù)規(guī)模增大時(shí),這種做法顯然就不太合適了,需要對(duì)場(chǎng)景數(shù)據(jù)作分塊處理。對(duì)大范圍區(qū)域進(jìn)行分塊不僅是因?yàn)樵O(shè)備內(nèi)存空間有限,容納不了大規(guī)模的數(shù)據(jù),而且有利于進(jìn)行基于分塊的視景體裁剪、模型數(shù)據(jù)的分塊實(shí)時(shí)讀取、紋理的處理和并行繪制。
分塊的大小對(duì)于最后三維場(chǎng)景的繪制速度影響很大。分塊越大,掃描就越粗糙,包括的頂點(diǎn)也就越多;反之,分塊越小,掃描越精細(xì),得到的裁剪后的頂點(diǎn)數(shù)也就越接近于在視景體內(nèi)的實(shí)際頂點(diǎn)數(shù)[7]。但是,對(duì)塊裁剪計(jì)算量大,數(shù)據(jù)塊太瑣碎,不利于數(shù)據(jù)組織和管理。由于要繪制頂點(diǎn)的數(shù)目和數(shù)據(jù)塊裁剪計(jì)算、加載時(shí)間直接影響實(shí)時(shí)漫游效果,所以選擇適當(dāng)?shù)姆謮K大小就要取一個(gè)折中的解決方案,使得既能利用掃描裁剪的高效率,又能獲得一個(gè)相對(duì)最少的頂點(diǎn)數(shù)。各數(shù)據(jù)塊是場(chǎng)景繪制的最小單元,考慮視點(diǎn)相關(guān)的各塊分辨率和透視投影規(guī)律,數(shù)據(jù)塊如果過大,相鄰不同分辨率模型數(shù)據(jù)顯示會(huì)有跳躍感,影響顯示效果。
為某一個(gè)圖層中的全部模型進(jìn)行數(shù)據(jù)塊劃分及建立索引的過程為:
(1)將該層的全部模型數(shù)據(jù)加入到一個(gè)數(shù)據(jù)塊中,計(jì)算該數(shù)據(jù)塊的矩形范圍框;
(2)設(shè)置數(shù)據(jù)塊劃分的粒度大小,可以用數(shù)據(jù)塊中的對(duì)象個(gè)數(shù)或?qū)ο笳加么鎯?chǔ)空間的大小為閾值;
(3)判斷數(shù)據(jù)塊中的對(duì)象是否在閾值之內(nèi),如果滿足,以該數(shù)據(jù)塊的范圍框作為對(duì)象的空間索引;如果不是,以對(duì)象的中心位置將該數(shù)據(jù)塊按四叉樹繼續(xù)劃分成4塊。
(4)對(duì)于四叉樹的每一塊,以塊內(nèi)所有對(duì)象的包圍框重新計(jì)算數(shù)據(jù)塊的范圍框,并重復(fù)步驟(3),直到所有分塊中的對(duì)象均滿足步驟(2)中的閾值條件。
基于上面的數(shù)據(jù)組織,三維場(chǎng)景的實(shí)時(shí)可視化實(shí)際上是根據(jù)視點(diǎn)參數(shù)和應(yīng)用需求來確定哪個(gè)層次的哪級(jí)模型的一個(gè)或多個(gè)子場(chǎng)景作為當(dāng)前的可視場(chǎng)景進(jìn)行繪制。為了加速三維物體模型的繪制速度以期達(dá)到實(shí)時(shí)顯示的要求,可以通過有效地剔除不必要顯示的對(duì)象,降低圖形渲染流水線的負(fù)荷,從而提高三維場(chǎng)景可視化的速度,常用的加速方法有視景體裁減。
視景體剔除也被稱為視景體裁剪。考慮到人類視角大小的限制,當(dāng)觀察一個(gè)場(chǎng)景時(shí),在人眼視角范圍外的物體是看不見的;換句話說,如果能在場(chǎng)景繪制之前,即使將看不到的場(chǎng)景部分剔除而不加以顯示也不會(huì)對(duì)正確的顯示結(jié)果造成任何影響。因此視景體剔除技術(shù)是通過判斷物體或場(chǎng)景的邊界是否與視景體存在交集來實(shí)現(xiàn)把位于視景體之外的物體或場(chǎng)景排除在繪制過程之外的。在程序?qū)崿F(xiàn)的過程中,視景體剔除流程往往和場(chǎng)景的數(shù)據(jù)組織方式相關(guān)。
城市三維可視化實(shí)際上就是物體從三維空間變換到二維平面的過程,一般要經(jīng)過視點(diǎn)變換、模型變換、投影變換和視口變換4個(gè)步驟。在計(jì)算機(jī)圖形學(xué)中,不同的投影方式定義了不同的視景體。視景體有兩個(gè)作用,首先,視景體決定了一個(gè)物體是如何映射到屏幕上的;其次,視景體定義了哪些物體被裁剪到最終的圖像之外。在三維顯示中,有透視投影和正射投影兩種投影模式。不管是透視投影還是正射投影,其視景體都有6個(gè)裁剪面,分別是左、右、近、遠(yuǎn)、上、下裁剪面。視景體裁剪就是利用這6個(gè)裁剪平面來判斷物體和視景體之間的關(guān)系,在視景體外的物體或物體的一部分將會(huì)被剔除掉而不顯示。
在城市三維地圖的實(shí)時(shí)顯示過程中,由于視點(diǎn)參數(shù)(如視點(diǎn)位置、視區(qū)中心位置、觀察方向等)都在不斷變化,場(chǎng)景裁切也在不斷進(jìn)行,當(dāng)視點(diǎn)參數(shù)變化一次,場(chǎng)景裁切也要進(jìn)行一次,因此場(chǎng)景裁切的效率會(huì)直接影響這個(gè)繪制過程的速度。這樣的裁剪方式效率非常低,因?yàn)樵陲@示時(shí)要對(duì)每一個(gè)點(diǎn)或物體都進(jìn)行測(cè)試,來確定哪些點(diǎn)或物體在視景體內(nèi),這顯然是不切實(shí)際的。
在實(shí)際裁剪過程中,前面分層分塊的三維數(shù)據(jù)組織方式可以有效地提高場(chǎng)景裁剪速度,實(shí)現(xiàn)場(chǎng)景的快速實(shí)時(shí)顯示。因?yàn)閿?shù)據(jù)分層有利于提取用戶感興趣的數(shù)據(jù),過濾掉無用的圖層;而通過數(shù)據(jù)分塊機(jī)制,在裁剪預(yù)處理階段就可以直接剔除位于裁剪區(qū)以外的數(shù)據(jù)塊,同時(shí)將位于裁剪區(qū)內(nèi)的數(shù)據(jù)塊作為部分裁剪結(jié)果返回,然后只需對(duì)那些與裁剪區(qū)相交的數(shù)據(jù)進(jìn)行模型的裁剪處理。
根據(jù)上述過程,我們分別針對(duì)圖層——數(shù)據(jù)塊——模型逐級(jí)過濾、裁剪,由粗到細(xì)得到各種裁剪結(jié)果圖層、數(shù)據(jù)塊、模型等中間數(shù)據(jù)。將這些數(shù)據(jù)按照模型——數(shù)據(jù)塊——圖層的順序進(jìn)行重構(gòu),就可以得到位于裁剪區(qū)內(nèi)的三維場(chǎng)景。基于數(shù)據(jù)分層分塊組織的大范圍城市三維場(chǎng)景的裁剪總體流程如圖1所示。
圖1 裁剪流程
從圖1的流程圖中可以看出,要提高視景體裁剪速度,關(guān)鍵是要提高判斷數(shù)據(jù)塊與裁剪區(qū)的關(guān)系以及裁剪區(qū)內(nèi)各個(gè)數(shù)據(jù)塊的模型與裁剪區(qū)的關(guān)系的計(jì)算效率。前者由于數(shù)據(jù)塊為矩形,其與裁剪區(qū)的關(guān)系可以簡(jiǎn)化為兩個(gè)矩形位置關(guān)系的算法,而后者可以通過使用模型的坐標(biāo)位置代替模型,將由多個(gè)三角面構(gòu)成的復(fù)雜模型的物體裁剪簡(jiǎn)化為點(diǎn)的裁剪。
這里,對(duì)該方法的繪制性能情況進(jìn)行了測(cè)試,為了消除網(wǎng)絡(luò)傳輸?shù)绕渌蛩氐挠绊?,先將模型?shù)據(jù)存儲(chǔ)在移動(dòng)設(shè)備里,為了試驗(yàn)的方便,只是簡(jiǎn)單地將數(shù)據(jù)劃分為4×4的16塊,每個(gè)數(shù)據(jù)塊中有5個(gè)建筑物模型實(shí)體,采用上述裁剪方法,顯示時(shí)的幀速率為14.6幀/秒,效果較好。
實(shí)驗(yàn)中所使用的開發(fā)平臺(tái)為Visual Studio 2005,開發(fā)包是 Windows Mobile 5.0 Pocket Phone SDK,并使用Photoshop制作和處理紋理貼圖,然后在3D Studio Max中建模。
在VC++中用OpenGL ES讀取和現(xiàn)實(shí)3DS文件的主要步驟如下:
(1)建立與3ds文件格式相應(yīng)的數(shù)據(jù)結(jié)構(gòu);
(2)將讀入的3ds文件數(shù)據(jù)放到上述建立的數(shù)據(jù)結(jié)構(gòu)中;
(3)將上述數(shù)據(jù)結(jié)構(gòu)轉(zhuǎn)換為便于OpenGL ES繪制的數(shù)據(jù)結(jié)構(gòu);
(4)用OpenGL ES提供的繪制函數(shù)完成最終圖形的顯示。
相關(guān)的數(shù)據(jù)結(jié)構(gòu)定義如下:
接著繼續(xù)讀入三角面、頂點(diǎn)、讀入材質(zhì)及顏色等。文件讀取完成后就是繪制模型了,用OpenGLES繪制圖形與OpenGL類似,在此不詳細(xì)敘述。
由于實(shí)驗(yàn)性質(zhì),在對(duì)某街區(qū)進(jìn)行建模后,將模型文件集成到移動(dòng)設(shè)備仿真器中進(jìn)行顯示,其中模型數(shù)據(jù)總量為23.6 M,實(shí)現(xiàn)了交互式漫游和以固定視角及視高自動(dòng)向前漫游兩種模式,漫游過程中LOD模型之間切換較自然,無明顯跳躍感,基本能保證實(shí)時(shí)交互瀏覽的連續(xù)流暢。
在目前的地理信息系統(tǒng)和移動(dòng)位置服務(wù)的實(shí)際應(yīng)用中,信息的表現(xiàn)形式仍然是以二維平面地圖為主,這里所研究的三維地圖在移動(dòng)設(shè)備上的實(shí)時(shí)顯示是現(xiàn)在地圖應(yīng)用領(lǐng)域中比較有新意的研究方向。本文結(jié)合四叉樹組織的數(shù)據(jù)結(jié)構(gòu),采用了通過減少視景體裁減平面和改進(jìn)判斷方法進(jìn)行優(yōu)化后的視景體裁減算法,加快了顯示速度。
但是本文對(duì)數(shù)據(jù)組織和視景體裁減的討論都是在一種理想狀態(tài)下進(jìn)行的實(shí)驗(yàn),模型簡(jiǎn)單可控,忽略了很多現(xiàn)實(shí)的影響因素。因此,進(jìn)一步的研究應(yīng)該充分考慮現(xiàn)實(shí)因素,使系統(tǒng)具有實(shí)用性。
[1]劉琨.基于智能客戶端的三維移動(dòng)GIS的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2006
[2]Luca Chittaro.Visualizing Information on Mobile Devices,IEEE Computer Society Computer,Vol 39 ,P:40 ~45,March 2006
[3]REICHENBACHER T.Adaptive concepts for a mobile cartography[A].Journal of Geographical Sciences,2001,11(suppl.):43 ~ 53
[4]孫敏,馬藹乃,陳軍.三維城市模型的研究現(xiàn)狀評(píng)述[J].遙感學(xué)報(bào),2000,6(2):155 ~161
[5]岳利群,夏青,柳佳佳等.全球海量地形數(shù)據(jù)組織管理方法的研究[J].測(cè)繪科學(xué),2009,34(3):121~123
[6]黃鐸.三維城市模型的數(shù)據(jù)內(nèi)容[D].武漢:武漢大學(xué),2004
[7]Miran Monsmondor,Hrvoje Komericki,Igor S.Pandzic.3D Visualization on Mobile Devices,Telecommunication Systems,Vol 32,P:181 ~191,July 2006