文|南寧市勘測設計院集團有限公司 王威 梁昊
隨著數據采集技術及計算機圖形處理技術的不斷提高,三維空間數據的獲取和表達得以實現[1],三維空間信息逐漸替代二維空間數據作為新一代空間信息基礎建設框架重要的數據內容,成為近年來測繪、地信與遙感領域內的一個研究熱點[2-3]。
傾斜攝影實景建模技術可通過專業的數據采集設備和快速處理流程獲取大量的地理空間數據,滿足人們對三維信息的需求,節省了大量的人力、物力。使用傾斜攝影實景建模技術獲取的空間信息與真實地物的誤差可達到毫米級別,從而得到高精度的傾斜攝影實景三維模型,能夠真實地反映地物的實際情況。目前,傾斜攝影三維實景建模技術由于其建模時效性高、模型覆蓋范圍光、模型精細高、模型真實化等特點,在住宅、規劃設計、大比例尺測繪等實際生產實踐中運用愈發廣泛。通過傾斜攝影三維實景建模技術生成的模型也被廣泛應用于智慧旅游、應急救援、城市規劃、環境保護等領域[4-5]。
傾斜攝影實景模型的數據處理技術和方法是實景模型應用于各個領域的橋梁。盡管現在市面上擁有眾多傾斜攝影測量數據處理軟件,但傾斜攝影測量數據處理方法仍遇到許多技術難點,一直限制著傾斜攝影技術的推廣,尤其是針對特殊部門的需求,如國土、建設、規劃等。在國土、建設、規劃部門中常規的做法是利用 AutoCAD 的插件技術[6],結合三維引擎實現傾斜實景與 CAD 的協同作業。采用這種方式的軟件包括清華三維的 ESP 系列軟件。該方式能夠滿足三維場景中的測量工作,但存在一定問題,即其所有功能需要第三方插件和CAD 協同完成,不能充分利用 CAD 自身的功能。對于習慣CAD操作的測繪、市政、規劃行業從業人員而言,這種方式增加了學習成本。同時,在對接小行業領域軟件如湘源控規、鴻業等CAD插件時具有天然的缺陷。因此,有必要把傾斜攝影測量數據集成到 AutoCAD 中轉為三維 DWG 文件,以生成帶有紋理圖像的三維模型,并支持CAD中實景三維LOD渲染,進而實現二者的無縫集成。
實現傾斜實景模型無縫集成第一個環節是對傾斜數據模型數據解析。主要包括幾何信息提取及處理、紋理數據提取及處理、DWG三維實體構建及索引信息提取,其轉換流程如圖1所示。

圖1 模型轉換流程
本文利用文件讀寫庫(osgDB)讀取OSGB數據[7],通過遍歷其各個節點進行幾何信息提取,在此過程中主要分為以下四個步驟:
(1)從外部存儲器中讀取OSGB到內存中。osgDB提供了文件I/O的函數接口,用戶通過“#include
(2)節點訪問器需要設置,運用它的遍歷模式游歷所有的OSGB節點。抽象訪問者(Visitor)、具體訪問者(Concrete Visitor)和節點(Node)構成一個訪問器。OSG中的NodeVisitor類的結構如下列所示:
NodeVisitor(TraversalModetm):TraversalMode為節點樹的遍歷模式,OSG中定義了如表1中的四種遍歷模式。

表1 節點樹的遍歷模式
void traverse(Node& node):遍歷節點。
void apply(不同節點類型):對不同類型的節點進行訪問,并且執行其自定義的操作,如獲得或修改節點屬性等。
NodeVisitor要使用訪問器執行它的功能時,還需要設計相應的具體的頂點訪問器和紋理訪問器來用于繼承于NodeVisitor類并重寫apply(…)函數。在執行accept函數的時候當前的節點自動調用apply(...)函數,將一個對象傳遞給下一個節點,實現訪問各種節點的各種操作;隨后執行traverse函數,調用 accept函數,游歷所有場景函數并調用子節點的函數,如Node、Group、LOD、Geode等節點。
(3)遍歷幾何體獲取幾何信息。模型的實體數據通常以向量的形式來表示,在OSG中就定義了大量用于保存這些數據的類, Geometry對象中的頂點坐標和法線數據就存儲在Vec3Array數組中。通過OSG可以從節點下獲取Drawable類,然后遍歷Drawable類下的Geometry對象獲取Vec3Array數組中的幾何信息。
(4)原始OSGB模型數據中的頂點坐標值不實際的坐標值,而且DWG模型為獨立的坐標系統,為了在模型標注時顯示區域模型的實際坐標值,需要將模型各頂點進行偏移,計算方式是根據傾斜攝影三維數據的空間參考和坐標原點信息來計算。
對OSGB紋理數據提取方法[8-10]與對幾何信息的提取相似,只不過管理紋理數據的“容器”與幾何信息的不大相同。根據OSG中紋理映射的方法可知,在遍歷模型節點時,調用OSG中關函數可以從Vec2Array、Texture2D、Image這幾個“容器”中提取出模型的紋理數據。
OSGB紋理坐標和DWG坐標的參考點是不一樣的,兩者的對應關系為:

其中Xd、Yd為DWG的紋理坐 標,Xo、Yo為OSGB的紋理坐標。
DWG圖形的本質是在AutoCAD數據庫中儲存的對象。符號表、實體和對象字典是AutoCAD數據庫對象基本分類[11]。其中,符號表是一種容器對象,包括層表、塊表和其他符號表;實體本質上是AutoCAD中的一條記錄,存儲格式偉鏈表形式。在AutoCAD中創建實體,則可以調用ObjectARX函數在相應的AutoCAD數據庫中添加一條記錄。對象字典與符號表相似,若要向圖形本身追加用戶定義的紋理信息,則可以使用對象字典。其組織結構如圖2所示。

圖2 AutoCAD數據庫
根據DWG模型和材質的要求,創建幾何對象和材質對象,然后將實體添加到塊表記錄中,將材質存儲材質字典中。
在結構上AutoCAD的AcDbSubDMesh與OSGB紋理映射極其相似。在ObjectARX中,對于一個三維幾何實體,AcDbSubDMesh實體是一個容器和接口,它可以創建紋理映射三維模型。
由于AutoCAD中是將紋理是存儲在AutoCAD數據庫的AcDbDictionary材質字典中的,所以還需要將紋理添加到材質字典里作為一種材質,然后利用AcDbMaterial類添加用于定義、存儲和顯示陰影實體的材質屬性。
上述解析工作僅針對單個OSGB文件,針對LOD形式的OSGB文件組織方式,本文提出AutoCAD中LOD結構OSGB數據格式的渲染方法。
利用OSGB文件解析程序,建立對應的AcDbSubDMesh實體數據,然后依據中心點的經緯數值,校正模型頂點的坐標的偏移量。最后,在磁盤中持久化,形成了OSGB到DWG的數據轉換。在由OSGB到DWG的數據轉換的基礎上進行構建索引[12]。在文本索引中把包圍盒坐標與文件路徑寫入。與此同時,將合并的最頂層包圍盒坐標寫入文本索引。在LOD節點構建中,首先要進行分類,有些是葉節點,有些是組結點,一個LOD結點包含同一個文件夾下的所有結點。LOD結點下是組結點,組結點下是葉結點,從而關聯形成一個LOD邏輯樹。因此,對于傾斜實景模型,同樣可以按照LOD的層次結構進行解析和數據存儲。
AutoCAD中LOD化渲染時,需要先獲取三維視圖中獲取可視范圍和下視距。渲染是分層級的,通常通過視距來確定。首先根據相機焦距距離以及視椎體在世界坐標下投影位置來確定LOD的層數以及顯示的數據塊[13]。進一步選擇刷新的結點并對結點進行渲染,將DWG中的模型復制到當前的文檔,完成渲染。當進行數據顯示時,對樹狀結點進行遍歷,根據當前相機焦距距離和視椎體對所有葉子結點進行篩選,然后根據“ARX顯示模塊”完成對篩選后的結點渲染。
基于上述提出的無縫集成AutoCAD的傾斜數據模型方法,本文設計和實現了傾斜實景模型LOD化渲染、坐標拾取、土方計算等功能,具體操作如下:
(1)傾斜實景模型LOD化渲染
在 AutoCAD 中顯示傾斜攝影測量數據,需要綜合考慮 AutoCAD 中三維顯示的規則以及其三維模型構建的機制。對傾斜攝影測量的數據顯示不僅僅是顯示三維模型,其中還包括對視圖操作,對事件處理,對事件響應機制的設置等一系列功能。最終完成傾斜攝影測量數據在 AutoCAD 中的LOD 顯示。
(2)坐標拾取
系統實現三維坐標拾取,通過捕捉鼠標射線,將三維坐標以SNAP點提示出來,用戶可以直接選擇該點,支持CAD中各種線段操作,實現傾斜數據模型與CAD數據編輯的無縫集成。
(3)土方計算
借助LOD渲染系統實現了場地平整的土方計算,效果如圖3中紅色數字代表場地標高,藍色數字代表設計標高,單元網格中的綠色數字代表每個單元網格的填挖方量。

圖3 土方量計算模型
隨著傾斜攝影處理系統的迅猛發展,其處理技術帶給了人們一些便利,因此,對人們傾斜攝影實模型的需求也逐漸增高。這其中就包括規劃、建設、國土等部門對傾斜攝影實景模型的需求,但由于龐大的傾斜攝影實景數據量和大規模三維場景的渲染功能欠缺。在如今基于AutoCAD的傾斜攝影實景數據處理系統仍面臨巨大機遇和挑戰。
本文結合AutoCAD軟件自身特點及傾斜攝影實景數據處理理論,基于OSG三維開源引擎及ObjectARX二次開發技術,設計了無縫集成AutoCAD的傾斜實景模型渲染系統??蓪崿F對傾斜攝影實景數據的加載、存儲、顯示、編輯及應用,滿足規劃、國土部門的實際需求,更好的擴展、深化實際生產中的傾斜攝影數據處理及應用領域,具有一定應用前景和廣闊的空間。