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