魏遠(yuǎn)航 朱錢洪 李曉俊
摘要:CityEngine在高效迅速生成大規(guī)模三維場景模型方面具有較大的技術(shù)優(yōu)勢,然而在建模完成后導(dǎo)出為obj模型常發(fā)生扭曲變形的情況。本文從OBJ模型數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)的角度進(jìn)行分析,探究其形成原因并提出了相應(yīng)的解決方案。
關(guān)鍵詞:CityEngine,obj,扭曲變形
中圖分類號(hào):TP391 文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1009-3044(2020)18-00010-02
開放科學(xué)(資源服務(wù))標(biāo)識(shí)碼(OSID):
1 引言
CityEngine建模是一種基于規(guī)則的快速三維建模方法,能調(diào)用建筑物底面矢量數(shù)據(jù)中屬性字段,進(jìn)行程序批量快速建模,充分利用了已有的數(shù)據(jù),同時(shí)提高了效率,為大場景三維建模提供了一種新的方法[1-3]。CityEngine高效迅速生成大場景模型的秘訣是其采用了CGA語言(Computer Generated Architec-ture)作為設(shè)計(jì)語言,通過預(yù)定義各類規(guī)則并將其賦予對應(yīng)的矢量面,迅速生成模型。這種批量建模技術(shù)非常適合對模型本身精細(xì)度要求不高但場景很大的工作(如規(guī)劃三維效果展示)。
OBJ文件是一種標(biāo)準(zhǔn)的3D模型文件格式,很適合用于3D軟件模型之間的互導(dǎo),作為一種文本文件格式,采用單純的字典狀結(jié)構(gòu),易于存儲(chǔ)[4-5]。然而在實(shí)際應(yīng)用中,經(jīng)常出現(xiàn)Citven-gine建模完成后導(dǎo)出為obj模型發(fā)生扭曲變形的情況,在其他三維平臺(tái)(如3Dmax)無法正常顯示。這對于Cityengine建模的后續(xù)分析和應(yīng)用造成了困難。本文擬從OBJ模型數(shù)據(jù)結(jié)構(gòu)和存儲(chǔ)的角度進(jìn)行分析,探究其形成原因并提出相應(yīng)的解決方案。
2 OBJ模型數(shù)據(jù)結(jié)構(gòu)
OBJ模型文件是Alias公司開發(fā)的一種標(biāo)準(zhǔn)三維模型文件格式[6],主流的軟件平臺(tái)(如Maya、3D max)一般都支持OBJ格式。OBJ模型以文本文件存儲(chǔ),構(gòu)成模型的點(diǎn)、矢量、模型坐標(biāo)是明碼標(biāo)記,非常利用用戶對其進(jìn)行查看和編輯。
OBJ模型文件一般包括obj文件和mtl文件組成,mtl是材質(zhì)索引庫文件,本文不作討論。Obj文件是由一行行的文本構(gòu)成,可以隨意加入空行和注釋行[7-9]。有效內(nèi)容部分由關(guān)鍵字(Key-word)開頭,關(guān)鍵字標(biāo)記了該行的含義和作用[10]。obj常用的關(guān)鍵字及含義如下所示。
3 變形原因分析
使用規(guī)則文件在Cityengine中構(gòu)建的模型以及導(dǎo)出的obj模型對比如圖1所示(左側(cè)為obj模型,右側(cè)為cityengine軟件顯示模型),對比兩者可以發(fā)現(xiàn)obj模型變形較為嚴(yán)重,幾乎所有面都發(fā)生不同程度的變形,進(jìn)一步分析可知:(1)變形的方向在于平面方向,垂直方向幾乎沒有發(fā)生位移;(2)貼圖的方向都屬正常,面的朝向大致也正常。
根據(jù)上文對obj文件數(shù)據(jù)結(jié)構(gòu)的剖析,貼圖方向和面朝向正??梢耘袛鄓n、vt、f參數(shù)應(yīng)該屬于正常,變形的方向可以初步判斷v參數(shù)的x和z值可能存在問題。為了進(jìn)一步分析其頂點(diǎn)坐標(biāo)值存在的誤差,檢查了obj文件中存在變形的某一面的頂點(diǎn)坐標(biāo)的情況,如下所示。
# mesh 'cut_mesh_2from geometry ' cut_mesh_2'
v 35614275.632 341.446 -3221109.749
v 35614275.632 345.446 -3221109.749
v 35614281.306 341.446 -3221111.697
v 35614281.306 345.446 -3221111.697
#4 vertices
vt 0.0000 0.0000
vt l.0000 0.0000
vt l.0000 1.0000
vt 0.0000 1.0000
#4 texture coordinates
g cut_mesh_2
s off
usemtl CityEngineMaterial_4
f 43/33 45/34 46/35 44/36
#1 face
所選分析面是obj模型中屋頂部分,從obj模型的側(cè)視圖可以看出該面為不規(guī)則四邊形,而從obj文件頂點(diǎn)坐標(biāo)來看屬于矩形,坐標(biāo)值與模型顯示效果明顯不符合(如圖2所示)。因此可以判斷obj文件中頂點(diǎn)坐標(biāo)值是正確的,扭曲的原因應(yīng)當(dāng)發(fā)生在軟件讀取或顯示的過程中。
進(jìn)一步研究發(fā)現(xiàn),obj文件頂點(diǎn)坐標(biāo)值是以float類型讀寫的,而obj文件是以文本文件存儲(chǔ)的,理論上可以存儲(chǔ)double型的數(shù)值。上文中的v參數(shù)中x坐標(biāo)值繼承了Cityengine中底面矢量數(shù)據(jù)的平面坐標(biāo)系x值(double類型)。由于float類型最大只能保留7位有效數(shù)字,而平面x坐標(biāo)整數(shù)位有8位,y坐標(biāo)整數(shù)位有7位,因此在讀寫時(shí)精度必然受到損失。
4 解決方案及驗(yàn)證
在三維GIS研究和工作中,不可避免的會(huì)使用到高斯平面坐標(biāo)等數(shù)值較大的底面矢量數(shù)據(jù),在此基礎(chǔ)上使用Cityengine生成模型通常都會(huì)遇到變形扭曲的問題。經(jīng)過上文分析,發(fā)現(xiàn)扭曲變形的主要原因是位數(shù)較大的x、z軸坐標(biāo)值,而v值(對應(yīng)于高程)一般整數(shù)不超過4位數(shù),不存在變形問題。
本文提出兩種解決方法解決上述問題:(1)在建模前對矢量文件進(jìn)行坐標(biāo)轉(zhuǎn)換,轉(zhuǎn)換為不加代號(hào)坐標(biāo),即可將精度至少提升到小數(shù)位后1位,滿足一般的建模精度;(2)在建模前將矢量中心平移至坐標(biāo)0點(diǎn),建模后反向平移,精度至少提升至厘米級(jí),但建模范圍大致必須在以中心點(diǎn)lOkm范圍內(nèi)。
將建模前建筑物地面矢量數(shù)據(jù)進(jìn)行坐標(biāo)轉(zhuǎn)換,由Xian_1980_3_Degree_GK_20ne_35轉(zhuǎn)換為Xian_1980_3_De-gree_GK_CM_105E,同步將矢量數(shù)據(jù)平移至坐標(biāo)0點(diǎn),將兩者分別導(dǎo)入Cityengine進(jìn)行規(guī)則建模,導(dǎo)出的obj模型如下所示。
通過最終導(dǎo)出obj模型效果的對比可以發(fā)現(xiàn),兩種解決方案得到的obj模型均不存在明顯變形扭曲,但是坐標(biāo)轉(zhuǎn)換的方法在細(xì)節(jié)處依然存在輕微的變形,這是由于平面坐標(biāo)只能精確到小數(shù)點(diǎn)后1位導(dǎo)致的,而將矢量平移至0點(diǎn)的方法則不存在任何變形問題,精度較高。5總結(jié)
Obj模型具有文件組織結(jié)構(gòu)簡單,易于存儲(chǔ)的特點(diǎn),是三維模型的通用格式之一,非常利于軟件平臺(tái)之間的銜接,然而對于三維GIS應(yīng)用,特別是大場景的模型構(gòu)建存在坐標(biāo)讀寫精度的缺陷。測繪行業(yè)的高斯平面坐標(biāo)一般都是數(shù)位較高的雙精度值,對于obj單精度讀寫的特性會(huì)產(chǎn)生頂點(diǎn)坐標(biāo)精度降低,模型扭曲變形的風(fēng)險(xiǎn),本質(zhì)上是由傳統(tǒng)三維建模行業(yè)和測繪行業(yè)研究對象差異引起的。
本文對于上述問題提出了兩種解決方案,第一種方法操作簡單但是精度略低,第二種方法精度高但操作步驟更復(fù)雜,很好地解決了Cityengine導(dǎo)出模型扭曲變形的問題。近年來,三維建模以及三維空間分析技術(shù)快速發(fā)展,對于三維模型數(shù)據(jù)通用性提出了更高的要求,作者也期待在測繪行業(yè)盡早形成相應(yīng)的三維數(shù)據(jù)規(guī)范,以促進(jìn)三維技術(shù)應(yīng)用更快的發(fā)展。 參考文獻(xiàn):
[1]謝衍憶,黃良平,陳元增,等,基于CityEngine的城市三維快速建模方法及應(yīng)用[J].地理空間信息,2016,14(2):39-40,62,8.
[2]鄒倩.CityEngine在不動(dòng)產(chǎn)登記三維建模與數(shù)據(jù)庫設(shè)計(jì)研究[D].合肥:合肥工業(yè)大學(xué),2016.
[3]王璐,朱小燕,谷中仁.基于CityEngine的校園三維模型建模研究[J].電子世界,2015(21):30-32.
[4]肖健,魏雄,王仁波.基于OpenGL的大型建筑三維場景模擬的實(shí)現(xiàn)與意義[J].電子質(zhì)量,2016(11):88-92.
[5]李寧,段國林,許紅靜.Pro/E與ADAMS之間的數(shù)據(jù)交換方式的研究[Jl‘機(jī)械設(shè)計(jì),2012,29(9):36-40.
[6]趙艷松.基于gITF的三維模型服務(wù)關(guān)鍵技術(shù)研究與實(shí)現(xiàn)[D].西安:西安電子科技大學(xué),2017.
[7]王金峰,姚國清.三維模型文件中的OBJ格式在OpenGL中的輸入與處理[Jl.電腦知識(shí)與技術(shù),2011,7(10):2393-2396。2399.
[8]謝利明.基于OpenGL的自動(dòng)化立體倉庫仿真平臺(tái)設(shè)計(jì)[D].河北:河北大學(xué),2012.
[9]王清,張必蘭.基于增強(qiáng)現(xiàn)實(shí)的安卓英語單詞識(shí)記軟件的設(shè)計(jì)與實(shí)現(xiàn)[J].電腦知識(shí)與技術(shù)(學(xué)術(shù)交流),2014(9X): 6431-6433,6435.
【通聯(lián)編輯:唐一東】
基金項(xiàng)目:重慶市國土房管科技項(xiàng)目(KJ-2019010):傾斜攝影實(shí)景三維模型在村鎮(zhèn)規(guī)劃中的應(yīng)用研究
作者簡介:魏遠(yuǎn)航(1989-),男,重慶人,助理工程師,工學(xué)學(xué)士,主要研究方向?yàn)槿S建模和無人機(jī)遙感。