楊飛龍,郎誠廉
(同濟(jì)大學(xué) 電氣工程系,上海 201804)
城軌電子沙盤通過構(gòu)建逼真的線路及沿線景物的三維模型,可以讓觀眾生動形象地了解軌道交通系統(tǒng)的組成及運(yùn)行概況。但在城軌電子沙盤中,建立軌道線路模型工作量大且不易人工進(jìn)行修改。因此,開發(fā)一種線路模型自動生成的方法,在此基礎(chǔ)上構(gòu)建電子沙盤,可以減輕勞動強(qiáng)度,有效提高工作質(zhì)量及效率。
電子沙盤比傳統(tǒng)物理沙盤能更直觀和形象地展示現(xiàn)實(shí)場景且互動性好,因此得到了廣泛應(yīng)用。隨著軌道交通的發(fā)展,城軌電子沙盤成為近年的研究熱點(diǎn)。構(gòu)建城軌電子沙盤三維模型的方法有很多種,可以通過建模軟件來完成,如Multigen Creator、3ds MAX等就是典型的代表,或通過建模的一些應(yīng)用程序接口來編程實(shí)現(xiàn),如OpenFlight API、OSG等。OSG 是一個基于工業(yè)圖形標(biāo)準(zhǔn)的高層次圖像開發(fā)API接口, 即三維渲染引擎 。Openflight API是一個包含頭文件和鏈接庫的C語言庫,它提供了訪問OpenFlight數(shù)據(jù)庫和Creator模型系統(tǒng)的接口方法,通過API可以進(jìn)行OpenFlight模型的實(shí)時模擬仿真、自動建模以及通過插件的形式對Creator進(jìn)行功能擴(kuò)展。
OSG中創(chuàng)建幾何體通常有3種方法:使用幾何圖元、使用OSG中的預(yù)定義幾何體、讀取文件導(dǎo)入場景模型。OSG將幾何圖元的類別分為點(diǎn)、線段、三角形、四邊形條帶以及多變形等10種,利用這10種圖元構(gòu)成任意復(fù)雜程度的物體。OpenFlight格式的模型是通過幾何圖元(geometry)、繼承(hierarchy)和屬性(attributes)3種元素定義的。幾何圖元包含多邊形、邊和頂點(diǎn),通過幾何圖元可構(gòu)建出平面,它通過繼承關(guān)系進(jìn)行組織。屬性用來提供一些附加特性 ,包括顏色屬性、紋理屬性,以獲得理想效果。基于OpenFlight API的建模方法就是從這3方面出發(fā),計(jì)算坐標(biāo)構(gòu)成面,再由多邊形圍成模型輪廓,然后給各個面添加紋理,令模型有較高的真實(shí)感。相比較而言,針對軌道線路的特點(diǎn)調(diào)用OpenFlight API編程建模較為簡單,故本文選取以O(shè)penFlight API為基礎(chǔ)的建模方法來完成城軌電子沙盤軌道三維模型的創(chuàng)建。
建立軌道模型的前提是要從圖紙上讀出描述線路幾何位形的中心線數(shù)據(jù)。分別讀取線路中心線的橫斷面和縱斷面數(shù)據(jù),然后統(tǒng)一起來。再用多條線段構(gòu)成的折線來近似表示線路中心線的曲線部分,由圖紙數(shù)據(jù)信息計(jì)算組成中心線的所有線段的偏角及端點(diǎn)坐標(biāo),可得到描述線路中心線的完整數(shù)據(jù),如表1所示。
表1 描述線路中心線的數(shù)據(jù)
其中X、Y、Z用來確定道路模型在場景中的位置,代表道路模型中心點(diǎn)在場景中的坐標(biāo)。H、P、R用來確定道路模型的朝向,代表道路模型繞3個坐標(biāo)軸的旋轉(zhuǎn)角度。
鋼軌和道床是軌道的重要組成部分,先對其幾何尺寸進(jìn)行分析,然后計(jì)算關(guān)鍵點(diǎn)坐標(biāo)。鋼軌截面如圖1所示。但為了減少模型的面,建模過程中把鋼軌簡化成上下底分別為軌頭和軌底寬度的梯形。道床以長方體代替,寬度2.36 m,高度h=0.314 m,軌道模型的截面如圖2所示。
A(x,y,z)就是線路中心線在此截面上的點(diǎn)(即構(gòu)成中心線某條線段的端點(diǎn))。由上述數(shù)據(jù)及軌道偏轉(zhuǎn)角度可求得截面上各點(diǎn)坐標(biāo),設(shè)d0為0點(diǎn)至A點(diǎn)距離,則0點(diǎn)的坐標(biāo)計(jì)算如下:
同理可算得其他點(diǎn)坐標(biāo)。由此可見,只要求得鋼軌截面上的點(diǎn)距中心線距離,即可求得該點(diǎn)坐標(biāo)。
圖1 鋼軌截面圖
圖2 軌道模型截面圖
由2.1節(jié)中所述的方法,根據(jù)線路中心線上一系列點(diǎn)的空間信息可求出各段軌道首尾處截面上的點(diǎn),然后通過調(diào)用OpenFlight API編程實(shí)現(xiàn)連點(diǎn)成面,并組成模型。部分程序如下:
mgrec *prec; mgrec *vrec; mgrec *v[4] ;
vrec = mgNewRec (fltVertex); mgAppend(prec, vrec);mgSetCoord3d (vrec, fltCoord3d, x, y, z);v[0] = mgGetChild (prec);v[1] = mgGet-Next (v[0] );
v[2] = mgGetNext (v[1] );v[3] = mgGetNext(v[2] );
mgSetAttList (v[0] , fltVU, 0.0, fltVV, l[k] ,MG_NULL);
mgSetAttList (v[1] , fltVU, 1.0, fltVV,l[k] ,MG_NULL);
mgSetAttList (v[2] , fltVU, 1.0, fltVV,l[k+1] , MG_NULL);
mgSetAttList (v[3] , fltVU, 0.0, fltVV,l[k+1] , MG_NULL);
程序?qū)崿F(xiàn)的功能就是把4個點(diǎn)添加到面節(jié)點(diǎn)prec上圍成一個面,然后為這個面添加紋理并設(shè)置合適的UV坐標(biāo)。由圖2知每段軌道模型由圍成道床、鋼軌的9個面形成,同理編程建立其余的面,則可組成完整的軌道模型。沿著中心線上的點(diǎn)從開始計(jì)算到終點(diǎn),一條完整的軌道就完成了??梢姡灰鶕?jù)中心線上一系列線段端點(diǎn)的空間信息計(jì)算得到相應(yīng)軌道截面上各點(diǎn)的坐標(biāo),就可以通過程序快速高效地建立軌道三維模型,且線路平滑視覺效果良好。
本文所述道岔建模方法的主要思路就是根據(jù)道岔不同部分的構(gòu)造特點(diǎn),將主線和側(cè)線的中心線數(shù)據(jù)分段,然后依據(jù)關(guān)鍵點(diǎn)與中心線間幾何關(guān)系分別求各段截面上關(guān)鍵點(diǎn)空間信息,最后調(diào)用OpenFlight API實(shí)現(xiàn)模型建立。
道岔的基本功能是實(shí)現(xiàn)線路的連接和交叉。其中以單開道岔在城市軌道交通中的應(yīng)用最為廣泛,如圖3所示。
圖3 單開道岔示意圖
本文以在地鐵中應(yīng)用廣泛的9號右開道岔為例,說明自動建立道岔模型的方法。9號道岔的數(shù)據(jù)信息如表2所示。
表2 9號道岔數(shù)據(jù)信息
尖軌后導(dǎo)曲線半徑為180.717 5 m,CE段距離為K=2.176 7 m,CD=1.474 7 m,GH=18.374 6 m。為應(yīng)用方便,特將道岔模型做了適當(dāng)延長,點(diǎn)E距模型主線和側(cè)線終點(diǎn)的距離均為10 m。相關(guān)軌道工程類書籍已對道岔主要尺寸計(jì)算做過詳細(xì)分析,本文不再重復(fù)每個數(shù)據(jù)的計(jì)算過程?;拒壍慕Ec普通線路相同。主線數(shù)據(jù)可分為5段,第1段左側(cè)為普通鋼軌,右側(cè)為尖軌,第2段兩側(cè)均是普通鋼軌,第3段左側(cè)為普通鋼軌,右側(cè)為有害空間,第4段左側(cè)為普通鋼軌,右側(cè)為輒岔前段,第5段左側(cè)為普通鋼軌,右側(cè)為輒岔后段及普通鋼軌。側(cè)線同理可分成7段,分段信息見表3。線路分段后,同2.1節(jié)中所述,將中心線曲線部分用折線近似表示并求出各線段端點(diǎn)的空間信息,由此構(gòu)成主線側(cè)線中心線詳細(xì)數(shù)據(jù)。
表3 側(cè)線中心線分段數(shù)據(jù)
3.2.1 鋼軌關(guān)鍵點(diǎn)求取
道岔模型的建立是由中心線上各點(diǎn)的空間信息求得該點(diǎn)所在道岔截面上關(guān)鍵點(diǎn)的坐標(biāo),然后由多個點(diǎn)圍成面,組成道岔模型。但由于道岔有尖軌、輒岔等特殊元件,因此部分關(guān)鍵點(diǎn)距線路中心線的距離d與普通的軌道不同,如尖軌寬度較窄,此段鋼軌內(nèi)側(cè)距中心線的距離d就大一些,可見要根據(jù)元件的具體形狀分析其關(guān)鍵點(diǎn)距中心線的距離,然后再依照公式(1)求解。
3.2.2 道床及DOF節(jié)點(diǎn)
上文提到普通軌道道床的模型是依靠中心線求得相應(yīng)截面上0、1、6、7點(diǎn)(見圖2)坐標(biāo)建立的。但是在道岔處若仍依照此法建模,則正線和側(cè)線道床將會有大面積重疊。為簡單計(jì)算,建模時可先畫鋼軌,然后根據(jù)道岔的形狀再建立道床,同時沿著鋼軌建2個高度不同的輔助面并貼上扣件紋理,便不會發(fā)生面重疊,達(dá)到更好的顯示效果。道岔通過轉(zhuǎn)動尖軌來完成引導(dǎo)列車進(jìn)入另一股道的功能,因此把圍成尖軌的面組織在DOF節(jié)點(diǎn)下,然后設(shè)置DOF節(jié)點(diǎn)參數(shù)控制尖軌轉(zhuǎn)動,建成的道岔模型如圖4所示。
圖4 道岔模型
將2付同型號道岔尾部用一段反向曲線連接起來便構(gòu)成了渡線,實(shí)現(xiàn)列車折返,完善了城軌電子沙盤中軌道的功能。
實(shí)現(xiàn)城軌電子沙盤的各項(xiàng)功能需要展示一個完全的軌道交通系統(tǒng),因此需要在軌道線路的基礎(chǔ)上引入其他模型來豐富和完善城軌電子沙盤。這些模型主要包括沿線設(shè)置的車站及站內(nèi)的行人,線路上運(yùn)行的列車、沿線的信號機(jī)、建筑物、樹木及馬路,軌道所經(jīng)過的高架及橋梁等。
模型的組合在Multigen Creator 建模軟件中進(jìn)行,通過外部引用的方法將各模型加以組合。組合上下行線路和渡線構(gòu)建完整的線路模型,在線路的起點(diǎn)、中點(diǎn)和末端設(shè)置3個不同的車站以體現(xiàn)城軌站臺的多樣性,分別是島式站后折返站、側(cè)式站、島式戰(zhàn)前折返站。在線路合適位置放入編組列車,分別表示列車的進(jìn)站、出站以及在線路上正常運(yùn)行等3種狀態(tài)。
信號機(jī)是城軌交通系統(tǒng)的重要信號設(shè)備,根據(jù)相關(guān)信號設(shè)備布置規(guī)范,在車站模型的附近位置放置出站信號機(jī)和進(jìn)站信號機(jī),在線路終端處設(shè)置終端信號機(jī),在道岔相應(yīng)位置設(shè)置防護(hù)信號機(jī)表明道岔開放方向。通過定義Switch節(jié)點(diǎn)可使信號燈顯示不同的顏色以代表不同的含義,同時注意道岔防護(hù)信號機(jī)信號燈的顏色應(yīng)與尖軌轉(zhuǎn)動的位置相符合。
為了獲得更好的視覺效果,需要根據(jù)軌線走向建立地形模型,通過截取地形的衛(wèi)星照片制作地形紋理,可使地形模型形象逼真。在車站等人流集散地放置簡單的住宅、商場等建筑及道路模型,在道路旁及軌道沿線引入了大量三維樹模型,合理布置并適當(dāng)調(diào)整大小,使整個沙盤看起來更加接近真實(shí)場景。圖5和圖6分別是城軌沙盤全貌和車站內(nèi)電子沙盤的視景圖片,這也體現(xiàn)了城軌電子沙盤的另外一個優(yōu)點(diǎn),可以任意移動和縮放整個沙盤,從而能讓觀眾從各個角度去觀察城軌電子沙盤以獲得更豐富的信息。
圖5 電子沙盤全貌
圖6 車站內(nèi)電子沙盤
本文所述的建模方法提高了城軌電子沙盤軌道線路模型建立的效率,且模型有較好的真實(shí)感。建立的城軌電子沙盤模型基本涵蓋了城市軌道交通系統(tǒng)的軌線、車站、機(jī)車、信號設(shè)備等基本要素,同時地形、建筑以及樹木等模型的引入提高了電子沙盤的逼真程度,能讓觀眾準(zhǔn)確形象地了解到軌道交通系統(tǒng)的組成部分及其作用。此外,軌道線路的中心線數(shù)據(jù)描述了線路的走向,以中心線數(shù)據(jù)為基礎(chǔ)在Visual C++平臺下開發(fā)的基于OSG的列車控制程序,可以控制列車運(yùn)動,控制信號燈顏色及道岔開放方向,使其與機(jī)車的運(yùn)行協(xié)調(diào)一致,從而模擬列車在軌道上的運(yùn)行過程,在城市軌道交通系統(tǒng)的運(yùn)作展示及教學(xué)實(shí)踐方面都有著積極的作用。
[1] OpenFlight_API_Users_Guide(Volume1):Read/Write[Z] .MultiGen-Paradigm,Inc, 2003.
[2] 練松良.軌道工程[M] .上海:同濟(jì)大學(xué)出版社,2006.
[3] 楊智勛.三維電子沙盤系統(tǒng)研究與實(shí)現(xiàn)[D] .長沙:中南大學(xué),2011,5.
[4] 朱 丹.城市軌道交通概論[M] .北京:人民交通出版社,2012.