黃國豪
三維數(shù)字城市是未來智慧城市建設的必然,其逼真的三維呈現(xiàn)在城市建設、國土規(guī)劃、公安消防等相關(guān)領域得到廣泛的應用。由于不同部門對高層建筑模型有不同的管理應用需求,需要對高層建筑模型進行分層進行表達,滿足交互式可視化等細節(jié)方面的需求[1]。
現(xiàn)有的三維建筑模型在3D GIS平臺通常是一個整體對象,無法對建筑進行分層交互式可視化操作,只能在三維建模軟件通過手工切割再導入3D GIS平臺。面對海量的三維數(shù)字城市的建筑模型,手工切割的效率不僅低下,而且需要大量的人員投入。針對這種情況,該文探討了建筑模型自動分層切割算法,基于3DS Max的二次開發(fā)工具實現(xiàn)了建筑模型自動分層切割,極大的提高了工作效率。
1 定義
1.1 CSG模型
三維矢量模型是二維中點、線、面矢量模型在三維中的推廣。它將三維空間中的實體抽象為三維空間中的點、線、面、體四種基本元素,然后以這四種基本幾何元素的集合來構(gòu)造更復雜的對象。以起點、終點來限定其邊界,以一組型值點來限定其形狀;以一個外邊界環(huán)和若干內(nèi)邊界環(huán)來限定其邊界,以一組型值曲線來限定其形狀;以一組曲面來限定其邊界和形狀。矢量模型能精確表達三維的線狀實體、面狀實體和體狀實體的不規(guī)則邊界,數(shù)據(jù)存儲格式緊湊、數(shù)據(jù)量小,并能直觀地表達空間幾何元素間的拓撲關(guān)系。
CSG模型(Constructive Solid Geometry)用一些基本體素如長方體、球柱體、椎體和圓環(huán)等,通過集合運算如并、交、差等操作來組合形成物體。如圖1所示。
TIN-CSG混合構(gòu)模是當前城市3D GIS和3DCM 構(gòu)模的主要方式,即以TIN模型表示地形表面,以CSG模型表示城市建筑物,兩種模型的數(shù)據(jù)是分開存儲的。為了實現(xiàn)TIN與CSG的集成,在TIN模型的形成過程中將建筑物的地面輪廓作為內(nèi)部約束,同時把CSG模型中建筑物的編號作為TIN模型中建筑物的地面輪廓多邊形的屬性,并且將兩種模型集成在一個用戶界面[3-4]。
1.2 紋理
三維模型的紋理是應用到模型上的一個二維圖片。紋理位圖對應二維數(shù)組中的每一元素,在表示紋理時對應的二維下標稱為紋理映射坐標,用字母(u,v)表示。紋理映射是紋理圖貼到多邊形表面的過程。
紋理坐標系(D3D)如圖3所示。
1.3 三維模型分割
三維模型分割是根據(jù)一定的幾何及拓撲特征,將封閉的三維網(wǎng)格多面體,依據(jù)表面幾何、拓撲特征,分解為一組數(shù)目有限、各自具有簡單形狀意義的、而且各自聯(lián)通的三維模型子塊的工作。
三維模型分割的定義。三維模型分割算法大體有基于分水嶺方法的分割、基于曲率信息的分割、基于體素分解的分割、基于聚類分析的分割、基于拓撲結(jié)構(gòu)圖的分割,還有文獻[1]武漢大學楊必勝教授等研究的基于切割環(huán)分解三維建筑物模型的算法等。
該文的切割方法是在3DMax里面調(diào)用切割(cup)函數(shù)直接對模型進行分層切割。在3DMax里面切割的好處是不用考慮復雜的切割算法以及三維實體重構(gòu),分割后的模型能保留正確的拓撲信息以及完整的樓層紋理信息,效率非常高。
1.4 碰撞檢測
如何求出三維模型樓頂?shù)淖鴺耸窃撐那懈罘椒ǖ幕A,最好的辦法是利用碰撞檢測[5]。
在虛擬現(xiàn)實世界中一般是通過檢測兩個實體所占的幾何空間是否相交判斷是否發(fā)生碰撞。在現(xiàn)實世界中,每個實體都占有一定幾何空間,而且不可能出現(xiàn)兩個實體相互穿透的現(xiàn)象。當虛擬現(xiàn)實系統(tǒng)中兩個實體所占有的幾何空間試圖相互穿透時,系統(tǒng)就認為這兩個實體發(fā)生了碰撞。
用四維空間來描述運動實體,前四維是通常意義上的四維空間,第四維是時間,那末一個實體就可以用四維空間中的點集來描述,即:
2 算法實現(xiàn)及應用
該方法是根據(jù)大比例尺DLG數(shù)據(jù)庫的居民地面得到樓層數(shù)、三維模型主體絕對高度以及三維模型側(cè)面紋理來判斷確定每層高度,然后從下往上對模型進行分層切割。
2.1 基于3DS Max切割算法設計
3DS Max是AutoDesk公司開發(fā)的專業(yè)建模、動畫制作、虛擬設計軟件,功能強大。該軟件提供了兩個層次的開發(fā)工具:MAXscript和SDK(Software Development Kit)。SDK是3ds Max強大的工具包,能開發(fā)出各種各樣的插件,3DS Max插件其實就是動態(tài)鏈接庫用以擴展MAX的功能,在windows里面就是DLL。
該工具開發(fā)環(huán)境:Visual studio 2005、3DMax9.0、3DS MAX SDK和ArcGIS Engine。3DS MAX SDK則需要從完整版的3DMAX光盤中安裝。
其算法流程如下圖4所示。
(1) 樓層數(shù)F1是直接讀取模型所在居民地面的Floor屬性得到。
(2) 模型主體高度H1的計算。
只要得到模型高度頂點(Vertex)列表,用GetVertex(i)獲取各頂點坐標列表,通過程序計算出女兒墻的高度,從而得到準確的模型主體高度H1。
首先讀取模型所有的頂點坐標,如下圖6的B1、B2、B3、B4和D1、D2、D3、D4,根據(jù)頂點Z坐標分別構(gòu)建平面封閉圖,再把全部平面封閉圖投影到一個平面上,判斷分析區(qū)分房上房頂和主體房頂。從而得到B1、B2、B3和B4是樓房主體房頂坐標。
然后隨意取樓房主體房頂任一邊(B2,B3),找出D1、D2、D3和D4最近的點D3,D3點和樓房主體頂點B3連線,取中間點F,從F點往Z坐標反方向做射線與樓房模型做碰撞檢測,得到碰撞點G。如圖6所示。
最后把碰撞點G和B3進行比較,如果Z坐標相等說明模型沒有女兒墻;如果不相等說明模型樓頂有女兒墻,B3的Z坐標減去G的Z坐標就得到女兒墻的高度,B3的Z坐標再減去A3的Z坐標再減去女兒墻的高度就是模型主體高度H1。
(3) 層高信息的計算。
貼圖要求為保證區(qū)域范圍內(nèi)整體色調(diào)的一致性,尤其獨立小區(qū)內(nèi)多個外觀一致性的建筑物模型,材質(zhì)色調(diào)要求一致、協(xié)調(diào)(貼圖前建立色板或公共紋理庫,所有貼圖人員從紋理庫中提取紋理,但紋理名稱不能改變,達到紋理重用以減少紋理數(shù)量)。因此可以通過三維模型側(cè)面主體紋理的查找統(tǒng)計,計算出主體樓層數(shù)。
在3D Max 獲取模型所有面的貼圖信息,找到Z坐標方向出現(xiàn)次數(shù)最多的紋理名稱,然后再計算該紋理在Z坐標方向出現(xiàn)的個數(shù),就是主體樓層數(shù)F2。同時計算一個紋理在Z坐標方向的高度,得到樓層高度H2。
如果F1等于F2,說明所有的樓層高度都是一致的,不需要對一樓樓層高度進行另外計算;
如果F1不等于F2,說明樓層高度不一致,一般是一樓高度是挑高層。一樓挑高的層高計算公式:
F3=H1-F2×H2
最后把層高信息記錄在數(shù)組M里。
Float[] M = F3,H2,…
(4) 定義切割路徑列表。
依次將數(shù)組M放入切割路徑列表,并對潛在切割對象構(gòu)建空間索引,存放樓層屬性信息便于日后3D GIS系統(tǒng)平臺的具體應用。從模型的最底層開始調(diào)用3DMax的切割函數(shù)依次從下到上進行分層切割。
2.2 應用試驗
該文試驗區(qū)域的三維模型通過高精度航拍的立體像對進行建模,模型頂上(平面屋頂、坡屋頂、瓦屋頂)的高度都是內(nèi)業(yè)量測出來的。成片居民區(qū)(屋頂有女兒墻的)以女兒墻高度測圖,并實地拍照進行紋理采集,最后利用三維建模軟件3DMax烘培合成。試驗區(qū)域為住宅樓。
該試驗區(qū)域精模紋理長、寬均為2的n次冪像素值,貼圖單邊像素數(shù)≤1024;中模紋理長、寬均為2的n次冪像素值,貼圖單邊像素數(shù)≤512;簡模紋理長、寬均為2的n次冪像素值,貼圖單邊像素數(shù)≤256。貼圖紋理尺寸長寬比例為1:1或1:2。紋理與實際一致(嚴格按照建筑物層數(shù)、窗戶數(shù)量制作紋理)。
數(shù)據(jù)的準備:大比例尺DLG數(shù)據(jù)庫MDB的居民地面數(shù)據(jù)。
該文選取的三維建筑模型是典型的居民樓,如圖9所示。樓層共11層,樓頂有樓梯房、裝飾構(gòu)件、兒女墻等,樓體有飄窗、陽臺等構(gòu)件,一樓是架空層。程序通過面積比較很容易把房上房頂、裝飾構(gòu)件和主體樓頂區(qū)分開來,快速準確算出女兒墻的高度。程序計算一樓的挑高高度為3.8 m,主體樓層高度為2.8 m。圖10切割結(jié)果表明,主體樓層和挑高樓層分層準確,沒有出現(xiàn)模型分割錯誤,分割后的樓層紋理正確,拓撲關(guān)系正確。
3 結(jié)語
通過SDK插件開發(fā)直接調(diào)用3DMax的核心函數(shù)對模型進行自動分層切割,不但提高了程序運行速度,還使模型分割效率和產(chǎn)品質(zhì)量有極大的提高,縮短了生產(chǎn)周期。3DMax的二次開發(fā)功能,對于理論研究和解決實際問題是十分有效的方法和手段。
三維網(wǎng)格模型的分割是具有挑戰(zhàn)性的課題,下一步研究的重點是引入樓層戶型平面圖進行自動分棟分層分戶切割并自動構(gòu)建室內(nèi)建模技術(shù)。
參考文獻
[1] 楊必勝,姜少波.基于切割環(huán)分解的三維建筑物細節(jié)層次模型構(gòu)造[J].測繪學報,2011,40(5):575-581.
[2] 孫曉鵬.三維模型的分割及應用研究[D].北京:中國科學院研究生院(計算技術(shù)研究所),2005.
[3] 李清泉.基于混合結(jié)構(gòu)的三維GIS數(shù)據(jù)模型與空間分析研究[D].武漢:武漢測繪科技大學,1998.
[4] 孫敏,陳軍.基于幾何元素的三維景觀實體建模研究[J].武漢測繪科技大學學報,2000,25(3):233-237.
[5] 焦?jié)?分布式虛擬環(huán)境中碰撞檢測響應的研究與實現(xiàn)[D].北京:北京航空航天大學,2001.
[6] 荷塘月色創(chuàng)作組.如何使用3DS SDK開發(fā)程序[M].北京:北京理工大學出版社,1999.
[7] 羅勝.3DS Max SDK插件開發(fā)技術(shù)[J].機床與液壓,2003(6):242-243.