文|南寧市勘測設(shè)計(jì)院集團(tuán)有限公司 王威 梁昊
隨著數(shù)據(jù)采集技術(shù)及計(jì)算機(jī)圖形處理技術(shù)的不斷提高,三維空間數(shù)據(jù)的獲取和表達(dá)得以實(shí)現(xiàn)[1],三維空間信息逐漸替代二維空間數(shù)據(jù)作為新一代空間信息基礎(chǔ)建設(shè)框架重要的數(shù)據(jù)內(nèi)容,成為近年來測繪、地信與遙感領(lǐng)域內(nèi)的一個研究熱點(diǎn)[2-3]。
傾斜攝影實(shí)景建模技術(shù)可通過專業(yè)的數(shù)據(jù)采集設(shè)備和快速處理流程獲取大量的地理空間數(shù)據(jù),滿足人們對三維信息的需求,節(jié)省了大量的人力、物力。使用傾斜攝影實(shí)景建模技術(shù)獲取的空間信息與真實(shí)地物的誤差可達(dá)到毫米級別,從而得到高精度的傾斜攝影實(shí)景三維模型,能夠真實(shí)地反映地物的實(shí)際情況。目前,傾斜攝影三維實(shí)景建模技術(shù)由于其建模時效性高、模型覆蓋范圍光、模型精細(xì)高、模型真實(shí)化等特點(diǎn),在住宅、規(guī)劃設(shè)計(jì)、大比例尺測繪等實(shí)際生產(chǎn)實(shí)踐中運(yùn)用愈發(fā)廣泛。通過傾斜攝影三維實(shí)景建模技術(shù)生成的模型也被廣泛應(yīng)用于智慧旅游、應(yīng)急救援、城市規(guī)劃、環(huán)境保護(hù)等領(lǐng)域[4-5]。
傾斜攝影實(shí)景模型的數(shù)據(jù)處理技術(shù)和方法是實(shí)景模型應(yīng)用于各個領(lǐng)域的橋梁。盡管現(xiàn)在市面上擁有眾多傾斜攝影測量數(shù)據(jù)處理軟件,但傾斜攝影測量數(shù)據(jù)處理方法仍遇到許多技術(shù)難點(diǎn),一直限制著傾斜攝影技術(shù)的推廣,尤其是針對特殊部門的需求,如國土、建設(shè)、規(guī)劃等。在國土、建設(shè)、規(guī)劃部門中常規(guī)的做法是利用 AutoCAD 的插件技術(shù)[6],結(jié)合三維引擎實(shí)現(xiàn)傾斜實(shí)景與 CAD 的協(xié)同作業(yè)。采用這種方式的軟件包括清華三維的 ESP 系列軟件。該方式能夠滿足三維場景中的測量工作,但存在一定問題,即其所有功能需要第三方插件和CAD 協(xié)同完成,不能充分利用 CAD 自身的功能。對于習(xí)慣CAD操作的測繪、市政、規(guī)劃行業(yè)從業(yè)人員而言,這種方式增加了學(xué)習(xí)成本。同時,在對接小行業(yè)領(lǐng)域軟件如湘源控規(guī)、鴻業(yè)等CAD插件時具有天然的缺陷。因此,有必要把傾斜攝影測量數(shù)據(jù)集成到 AutoCAD 中轉(zhuǎn)為三維 DWG 文件,以生成帶有紋理圖像的三維模型,并支持CAD中實(shí)景三維LOD渲染,進(jìn)而實(shí)現(xiàn)二者的無縫集成。
實(shí)現(xiàn)傾斜實(shí)景模型無縫集成第一個環(huán)節(jié)是對傾斜數(shù)據(jù)模型數(shù)據(jù)解析。主要包括幾何信息提取及處理、紋理數(shù)據(jù)提取及處理、DWG三維實(shí)體構(gòu)建及索引信息提取,其轉(zhuǎn)換流程如圖1所示。
圖1 模型轉(zhuǎn)換流程
本文利用文件讀寫庫(osgDB)讀取OSGB數(shù)據(jù)[7],通過遍歷其各個節(jié)點(diǎn)進(jìn)行幾何信息提取,在此過程中主要分為以下四個步驟:
(1)從外部存儲器中讀取OSGB到內(nèi)存中。osgDB提供了文件I/O的函數(shù)接口,用戶通過“#include
(2)節(jié)點(diǎn)訪問器需要設(shè)置,運(yùn)用它的遍歷模式游歷所有的OSGB節(jié)點(diǎn)。抽象訪問者(Visitor)、具體訪問者(Concrete Visitor)和節(jié)點(diǎn)(Node)構(gòu)成一個訪問器。OSG中的NodeVisitor類的結(jié)構(gòu)如下列所示:
NodeVisitor(TraversalModetm):TraversalMode為節(jié)點(diǎn)樹的遍歷模式,OSG中定義了如表1中的四種遍歷模式。
表1 節(jié)點(diǎn)樹的遍歷模式
void traverse(Node& node):遍歷節(jié)點(diǎn)。
void apply(不同節(jié)點(diǎn)類型):對不同類型的節(jié)點(diǎn)進(jìn)行訪問,并且執(zhí)行其自定義的操作,如獲得或修改節(jié)點(diǎn)屬性等。
NodeVisitor要使用訪問器執(zhí)行它的功能時,還需要設(shè)計(jì)相應(yīng)的具體的頂點(diǎn)訪問器和紋理訪問器來用于繼承于NodeVisitor類并重寫apply(…)函數(shù)。在執(zhí)行accept函數(shù)的時候當(dāng)前的節(jié)點(diǎn)自動調(diào)用apply(...)函數(shù),將一個對象傳遞給下一個節(jié)點(diǎn),實(shí)現(xiàn)訪問各種節(jié)點(diǎn)的各種操作;隨后執(zhí)行traverse函數(shù),調(diào)用 accept函數(shù),游歷所有場景函數(shù)并調(diào)用子節(jié)點(diǎn)的函數(shù),如Node、Group、LOD、Geode等節(jié)點(diǎn)。
(3)遍歷幾何體獲取幾何信息。模型的實(shí)體數(shù)據(jù)通常以向量的形式來表示,在OSG中就定義了大量用于保存這些數(shù)據(jù)的類, Geometry對象中的頂點(diǎn)坐標(biāo)和法線數(shù)據(jù)就存儲在Vec3Array數(shù)組中。通過OSG可以從節(jié)點(diǎn)下獲取Drawable類,然后遍歷Drawable類下的Geometry對象獲取Vec3Array數(shù)組中的幾何信息。
(4)原始OSGB模型數(shù)據(jù)中的頂點(diǎn)坐標(biāo)值不實(shí)際的坐標(biāo)值,而且DWG模型為獨(dú)立的坐標(biāo)系統(tǒng),為了在模型標(biāo)注時顯示區(qū)域模型的實(shí)際坐標(biāo)值,需要將模型各頂點(diǎn)進(jìn)行偏移,計(jì)算方式是根據(jù)傾斜攝影三維數(shù)據(jù)的空間參考和坐標(biāo)原點(diǎn)信息來計(jì)算。
對OSGB紋理數(shù)據(jù)提取方法[8-10]與對幾何信息的提取相似,只不過管理紋理數(shù)據(jù)的“容器”與幾何信息的不大相同。根據(jù)OSG中紋理映射的方法可知,在遍歷模型節(jié)點(diǎn)時,調(diào)用OSG中關(guān)函數(shù)可以從Vec2Array、Texture2D、Image這幾個“容器”中提取出模型的紋理數(shù)據(jù)。
OSGB紋理坐標(biāo)和DWG坐標(biāo)的參考點(diǎn)是不一樣的,兩者的對應(yīng)關(guān)系為:
其中Xd、Yd為DWG的紋理坐 標(biāo),Xo、Yo為OSGB的紋理坐標(biāo)。
DWG圖形的本質(zhì)是在AutoCAD數(shù)據(jù)庫中儲存的對象。符號表、實(shí)體和對象字典是AutoCAD數(shù)據(jù)庫對象基本分類[11]。其中,符號表是一種容器對象,包括層表、塊表和其他符號表;實(shí)體本質(zhì)上是AutoCAD中的一條記錄,存儲格式偉鏈表形式。在AutoCAD中創(chuàng)建實(shí)體,則可以調(diào)用ObjectARX函數(shù)在相應(yīng)的AutoCAD數(shù)據(jù)庫中添加一條記錄。對象字典與符號表相似,若要向圖形本身追加用戶定義的紋理信息,則可以使用對象字典。其組織結(jié)構(gòu)如圖2所示。
圖2 AutoCAD數(shù)據(jù)庫
根據(jù)DWG模型和材質(zhì)的要求,創(chuàng)建幾何對象和材質(zhì)對象,然后將實(shí)體添加到塊表記錄中,將材質(zhì)存儲材質(zhì)字典中。
在結(jié)構(gòu)上AutoCAD的AcDbSubDMesh與OSGB紋理映射極其相似。在ObjectARX中,對于一個三維幾何實(shí)體,AcDbSubDMesh實(shí)體是一個容器和接口,它可以創(chuàng)建紋理映射三維模型。
由于AutoCAD中是將紋理是存儲在AutoCAD數(shù)據(jù)庫的AcDbDictionary材質(zhì)字典中的,所以還需要將紋理添加到材質(zhì)字典里作為一種材質(zhì),然后利用AcDbMaterial類添加用于定義、存儲和顯示陰影實(shí)體的材質(zhì)屬性。
上述解析工作僅針對單個OSGB文件,針對LOD形式的OSGB文件組織方式,本文提出AutoCAD中LOD結(jié)構(gòu)OSGB數(shù)據(jù)格式的渲染方法。
利用OSGB文件解析程序,建立對應(yīng)的AcDbSubDMesh實(shí)體數(shù)據(jù),然后依據(jù)中心點(diǎn)的經(jīng)緯數(shù)值,校正模型頂點(diǎn)的坐標(biāo)的偏移量。最后,在磁盤中持久化,形成了OSGB到DWG的數(shù)據(jù)轉(zhuǎn)換。在由OSGB到DWG的數(shù)據(jù)轉(zhuǎn)換的基礎(chǔ)上進(jìn)行構(gòu)建索引[12]。在文本索引中把包圍盒坐標(biāo)與文件路徑寫入。與此同時,將合并的最頂層包圍盒坐標(biāo)寫入文本索引。在LOD節(jié)點(diǎn)構(gòu)建中,首先要進(jìn)行分類,有些是葉節(jié)點(diǎn),有些是組結(jié)點(diǎn),一個LOD結(jié)點(diǎn)包含同一個文件夾下的所有結(jié)點(diǎn)。LOD結(jié)點(diǎn)下是組結(jié)點(diǎn),組結(jié)點(diǎn)下是葉結(jié)點(diǎn),從而關(guān)聯(lián)形成一個LOD邏輯樹。因此,對于傾斜實(shí)景模型,同樣可以按照LOD的層次結(jié)構(gòu)進(jìn)行解析和數(shù)據(jù)存儲。
AutoCAD中LOD化渲染時,需要先獲取三維視圖中獲取可視范圍和下視距。渲染是分層級的,通常通過視距來確定。首先根據(jù)相機(jī)焦距距離以及視椎體在世界坐標(biāo)下投影位置來確定LOD的層數(shù)以及顯示的數(shù)據(jù)塊[13]。進(jìn)一步選擇刷新的結(jié)點(diǎn)并對結(jié)點(diǎn)進(jìn)行渲染,將DWG中的模型復(fù)制到當(dāng)前的文檔,完成渲染。當(dāng)進(jìn)行數(shù)據(jù)顯示時,對樹狀結(jié)點(diǎn)進(jìn)行遍歷,根據(jù)當(dāng)前相機(jī)焦距距離和視椎體對所有葉子結(jié)點(diǎn)進(jìn)行篩選,然后根據(jù)“ARX顯示模塊”完成對篩選后的結(jié)點(diǎn)渲染。
基于上述提出的無縫集成AutoCAD的傾斜數(shù)據(jù)模型方法,本文設(shè)計(jì)和實(shí)現(xiàn)了傾斜實(shí)景模型LOD化渲染、坐標(biāo)拾取、土方計(jì)算等功能,具體操作如下:
(1)傾斜實(shí)景模型LOD化渲染
在 AutoCAD 中顯示傾斜攝影測量數(shù)據(jù),需要綜合考慮 AutoCAD 中三維顯示的規(guī)則以及其三維模型構(gòu)建的機(jī)制。對傾斜攝影測量的數(shù)據(jù)顯示不僅僅是顯示三維模型,其中還包括對視圖操作,對事件處理,對事件響應(yīng)機(jī)制的設(shè)置等一系列功能。最終完成傾斜攝影測量數(shù)據(jù)在 AutoCAD 中的LOD 顯示。
(2)坐標(biāo)拾取
系統(tǒng)實(shí)現(xiàn)三維坐標(biāo)拾取,通過捕捉鼠標(biāo)射線,將三維坐標(biāo)以SNAP點(diǎn)提示出來,用戶可以直接選擇該點(diǎn),支持CAD中各種線段操作,實(shí)現(xiàn)傾斜數(shù)據(jù)模型與CAD數(shù)據(jù)編輯的無縫集成。
(3)土方計(jì)算
借助LOD渲染系統(tǒng)實(shí)現(xiàn)了場地平整的土方計(jì)算,效果如圖3中紅色數(shù)字代表場地標(biāo)高,藍(lán)色數(shù)字代表設(shè)計(jì)標(biāo)高,單元網(wǎng)格中的綠色數(shù)字代表每個單元網(wǎng)格的填挖方量。
圖3 土方量計(jì)算模型
隨著傾斜攝影處理系統(tǒng)的迅猛發(fā)展,其處理技術(shù)帶給了人們一些便利,因此,對人們傾斜攝影實(shí)模型的需求也逐漸增高。這其中就包括規(guī)劃、建設(shè)、國土等部門對傾斜攝影實(shí)景模型的需求,但由于龐大的傾斜攝影實(shí)景數(shù)據(jù)量和大規(guī)模三維場景的渲染功能欠缺。在如今基于AutoCAD的傾斜攝影實(shí)景數(shù)據(jù)處理系統(tǒng)仍面臨巨大機(jī)遇和挑戰(zhàn)。
本文結(jié)合AutoCAD軟件自身特點(diǎn)及傾斜攝影實(shí)景數(shù)據(jù)處理理論,基于OSG三維開源引擎及ObjectARX二次開發(fā)技術(shù),設(shè)計(jì)了無縫集成AutoCAD的傾斜實(shí)景模型渲染系統(tǒng)。可實(shí)現(xiàn)對傾斜攝影實(shí)景數(shù)據(jù)的加載、存儲、顯示、編輯及應(yīng)用,滿足規(guī)劃、國土部門的實(shí)際需求,更好的擴(kuò)展、深化實(shí)際生產(chǎn)中的傾斜攝影數(shù)據(jù)處理及應(yīng)用領(lǐng)域,具有一定應(yīng)用前景和廣闊的空間。