張 瑩,郎誠廉
(同濟(jì)大學(xué) 電子與信息工程學(xué)院,上海 200092)
列車車窗雪天特效場景的建模與仿真
張 瑩,郎誠廉
(同濟(jì)大學(xué) 電子與信息工程學(xué)院,上海 200092)
本文以軌道交通視景仿真為背景,對三維視景仿真特效進(jìn)行研究。利用Creator建模軟件對線路、車站及周邊環(huán)境進(jìn)行建模,重點是對雪效及車窗積雪進(jìn)行建模;并以VC++2005為平臺,利用OpenSceneGraph技術(shù)實現(xiàn)對三維模型的驅(qū)動控制和人機(jī)互動。
建模;積雪;雨刷器;人機(jī)互動;OpenSceneGraph
三維視景特效的研究,尤其是對如自然環(huán)境,災(zāi)情特效的仿真研究是當(dāng)前的熱點課題和應(yīng)用最為廣泛的實用技術(shù)之一,并在軍事演練、城市規(guī)劃、建筑設(shè)計、影視制作、模擬駕駛、大型工程漫游、模擬訓(xùn)練以及交互式娛樂仿真等領(lǐng)域得到了十分廣泛的應(yīng)用。三維實景特效的仿真能滿足高要求的仿真需求,它的空間表現(xiàn)能力、人機(jī)交互式的操作環(huán)境以及帶給人的身臨其境的感受,都將一改人與計算機(jī)之間枯燥、生硬和被動的狀況。在軌道交通中已有的實景仿真中可以看到實時下雪場景模擬,卻看不到積雪及刮雨器刮雪等效果。本文將重點對車窗視景中的雪效進(jìn)行研究并實現(xiàn)。
視景仿真主要由場景模型的建立和場景仿真驅(qū)動兩大塊組成。本文將利用MultigenCreator三維模型軟件對車窗,雪效及車窗外的場景進(jìn)行建模,并通過OpenSceneGraph三維驅(qū)動技術(shù),對模型進(jìn)行控制并實現(xiàn)人機(jī)互動。
傳統(tǒng)的三維圖形建模軟件如MAYA,3DStudio MAX,SoftImage,LightWave3D等都可以用來創(chuàng)建各種各樣的三維模型,本課題選用Multigen Creator建模軟件。相比前面的建模軟件,Multigen Creator的優(yōu)勢在于它是一種實時可視化三維建模軟件。它特有的OpenFlight模型數(shù)據(jù)格式能對每一個模型單元節(jié)點進(jìn)行管理和實時驅(qū)動,有利于模型的后續(xù)修改和移植,極大地配合了實時視景仿真的需求。同時,它提供了強(qiáng)大的多邊形建模、矢量建模以及大場景、大地形精確生成等功能,配合其專業(yè)的插件和功能模塊,使得用戶能夠高效、便捷地生成實時三維模型數(shù)據(jù)庫,并能與其他仿真驅(qū)動軟件能夠極好地配合。三維數(shù)據(jù)庫結(jié)構(gòu)如圖1所示。
圖1 三維數(shù)據(jù)庫結(jié)構(gòu)圖
1.1 列車運行場景的構(gòu)建
Creator常用建模技術(shù)有紋理映射技術(shù),公告牌技術(shù),LOD技術(shù),DOF技術(shù),外部引用技術(shù)等,運用這些技術(shù)對列車運行場景進(jìn)行建模。步驟如下:
(1)數(shù)據(jù)采集:本文以上海軌道交通3號線上海南站至石龍路站為例,實地拍攝搜集沿線視景及站臺的圖片,為后期的紋理制作和外部場景構(gòu)建提供依據(jù)。
(2)數(shù)據(jù)處理:通過使用Photoshop等軟件對采集后的數(shù)據(jù)進(jìn)行格式轉(zhuǎn)換,亮度調(diào)節(jié)以及相應(yīng)的裁剪,值得注意的是每張紋理的規(guī)格都必須滿足2n。
(3)模型構(gòu)建:確定構(gòu)建順序,分別對線路、建筑物、樹木、站臺以及站臺上的廣告牌、顯示器、人物等進(jìn)行建模。
(4)紋理和材質(zhì):對于細(xì)節(jié)復(fù)雜,但重要程度不高的模型,添加紋理和材質(zhì)可以使其具有很高的逼真度。
(5)場景整合:利用外部引用技術(shù),對在不同.flt文件中建立的不同模型移動復(fù)制到同一個.flt文件中。這樣不僅能夠有效降低模型數(shù)據(jù)庫的規(guī)模,節(jié)省內(nèi)存,而且提高了資源的利用率。
1.2 車窗和積雪的建模
1.2.1 車窗與地面積雪的構(gòu)建
在OpenFlight模型數(shù)據(jù)庫中提供的Switch節(jié)點是一種可以控制其子節(jié)點現(xiàn)實狀態(tài)的特殊節(jié)點,該節(jié)點可以包含一系列的節(jié)點掩碼,每個掩碼都可以對應(yīng)一種子節(jié)點的顯示狀態(tài)組合,用這種方法來表現(xiàn)模型的不同狀態(tài)。
積雪的效果可以應(yīng)用Switch節(jié)點來實現(xiàn)。以車窗積雪為例,將貼有不同雪效紋理的節(jié)點放置在Switch節(jié)點下,設(shè)置該節(jié)點的屬性。如圖2所示,有4個子節(jié)點的Switch節(jié)點,改變子節(jié)點不同的狀態(tài)可以設(shè)置16種不同的組成狀態(tài)。在模擬積雪中,用5個不同的狀態(tài)來模擬,所以設(shè)置該節(jié)點所包含的掩碼數(shù)量為5,即模型包括5個不通的顯示狀態(tài),當(dāng)前的節(jié)點索引值為1,子節(jié)點狀態(tài)為第1個子節(jié)點顯示,其他子節(jié)點不顯示。
1.2.2 車內(nèi)雨刷器的建模
Creator模型數(shù)據(jù)庫中的DOF技術(shù)能使模型具有活動的能力,DOF節(jié)點可以控制子節(jié)點按照設(shè)置的自由度范圍進(jìn)行移動或者旋轉(zhuǎn)運動,用這中方法來使模型按照符合邏輯的方向運動,增強(qiáng)了模型數(shù)據(jù)庫的真實性。
雨刷器的運動是一個繞點旋轉(zhuǎn)的過程,所以雨刷器的建??梢允褂肈OF技術(shù)。(1)把需要設(shè)置自由度的雨刷器模型的對應(yīng)節(jié)點成為DOF節(jié)點的子節(jié)點。(2)為該模型對象創(chuàng)建相應(yīng)的局部坐標(biāo)系,因為模型對象的運動都是相對該局部坐標(biāo)系進(jìn)行的。使用“Local-DOF/Set DOF Limits”菜單命令,如圖3,設(shè)置DOF節(jié)點的自由度方向與范圍。
圖2 雪效的switch節(jié)點設(shè)置
圖3 雨刷器的DOF節(jié)點設(shè)置
OpenSceneGraph(OSG)是基于C++平臺的應(yīng)用程序接口(API),它包含了一系列的開源圖形庫,主要為圖形圖像應(yīng)用程序的開發(fā)提供場景管理和圖形渲染優(yōu)化的功能。其數(shù)據(jù)庫的支持庫可以方便地讀寫數(shù)據(jù),支持大量的數(shù)據(jù)格式。同時,它有一套節(jié)點工具集,支持粒子系統(tǒng),特效框架結(jié)構(gòu),交互控制與虛擬相關(guān)的效果。
前文通過利用Creator軟件建立好模型后,為保證.flt文件中紋理效果,使用osgConv工具將.flt文件轉(zhuǎn)成.ive文件。在C++平臺調(diào)用OSG的API,對三維實景進(jìn)行渲染。
本課題的場景控制主要包括對列車運動、積雪以及雨刷器動作的控制,為實現(xiàn)人機(jī)互動,可以通過OSG事件響應(yīng)來實現(xiàn)。
2.1 OSG事件響應(yīng)與交互機(jī)制
在OSG中,真正處理事件的函數(shù)是handle-NativeWindowingEvent,系統(tǒng)在捕捉到事件后,將這些待處理的事件壓入到事件序列即osgGA::Event-Queue中。如圖4所示,OSG里有專門的事件處理類osgGA::GUIEventHandler中的handle函數(shù)對該序列中的所有事件進(jìn)行響應(yīng)。GUIEventHandler是一個回調(diào)函數(shù),在每一幀的渲染當(dāng)中OSG會遍歷所有的回調(diào)函數(shù),所以當(dāng)前事件的處理可以很快的響應(yīng)到下一幀場景的變化當(dāng)中。Handle可以重載多次,實現(xiàn)不同的功能。
圖4 OSG事件響應(yīng)機(jī)制
與場景中的物體進(jìn)行交互,場景中的數(shù)據(jù)主要由Viewer負(fù)責(zé)進(jìn)行渲染。Viewer的addEventHandler專門用于處理事件,它會為當(dāng)前視口加入事件處理器,即osgGA::GUIEventHandler類的一個對象,通過生成一個類從osgGA::GUIEventHandler中公有派生,在生成的類中處理各種事件。然后使用viewer類的addEventHandler函數(shù)將對象加入到事件處理序列中。
2.2 場景漫游的驅(qū)動
以模擬列車視點的移動,需要設(shè)計一個合理的漫游器,漫游器改變的是觀察者的位置以及觀察方向。在編寫漫游器前,設(shè)計符合邏輯的矩陣操作器是非常重要的。設(shè)計步驟如下:
(1)編寫一個繼承自osgGA::GUIEventHandler類的新類。
(2)重載handle()函數(shù),并在handle()中添加合適的事件處理函數(shù),并指定執(zhí)行相關(guān)的動作。通過添加鍵盤的響應(yīng)函數(shù)來控制列車運行的速度。
(3)定義視點初始位置和角度,并設(shè)置相關(guān)矩陣變化函數(shù)。根據(jù)線路模型的數(shù)據(jù):distance表示列車移動的位移,posx,posy,posz用來確定列車模型在場景中的位置,代表模型中心點的坐標(biāo),rotx,roty,rotz用來確定道路模型的朝向,繞3個坐標(biāo)軸的旋轉(zhuǎn)角度。隨著distance的增加,會給出一些列的pos與rot數(shù)據(jù)。根據(jù)這些數(shù)據(jù),去設(shè)置漫游器的矩陣。程序的流程圖如圖5所示。
圖5 矩陣實現(xiàn)流程圖
(4)關(guān)聯(lián)操作器到當(dāng)前視景中,viewer→setCa meraManipulator(camera)。
2.3 雨刷器動作的驅(qū)動
在OSG中,osgSim::DOFTransform類是對Multigen中DOF操作的一個封裝,setCurrentHPR函數(shù)可以用來實現(xiàn)雨刷器模型的旋轉(zhuǎn);osgSim:: MultiSwitch類是基于OpenFlight中的switch的操作,setValue可以用來控制不同積雪紋理的顯示或隱藏。
雨刷器模型擺動的范圍為0?!?20。,設(shè)運動一周的時間為T,那么雨刮器的角速度程序中設(shè)置DOF節(jié)點正向角速度為ωwipe,反向角速度為–ωwipe。當(dāng)在一個周期中運行到時間t時,控制DOF節(jié)點使雨刷運動到ωwipe?t,同時控制Switch節(jié)點,使對應(yīng)的0~ωwipe?t區(qū)域的積雪刷除。
實現(xiàn)效果的程序結(jié)構(gòu)如圖6所示。
圖6 雨刷器動作實現(xiàn)的程序結(jié)構(gòu)
利用Creator建模,以VC++2005為開發(fā)平臺,并將模型導(dǎo)入OSG中渲染,實現(xiàn)對模型的控制;利用osgGA::GUIEventHandler類進(jìn)行人機(jī)互動。圖7為晴天無司機(jī)艙時搭建的場景;加入司機(jī)艙和雨刮器,并加入下雪草地積雪和刮雨器刮玻璃窗中積雪時,列車窗口中可以看到如圖8所示的下雪和積雪效果及刮雪效果。
圖7 晴天時場景搭建圖
圖8 雪天列車車窗與刮雪模擬場景
本文利用Creator建模軟件完成對軌道交通場景的模型創(chuàng)建,并對積雪天氣及車窗雨刷器進(jìn)行建模,利用基于C++的OSG三維驅(qū)動技術(shù)實現(xiàn)對場景的驅(qū)動控制,實現(xiàn)人機(jī)交互。用于列車三維視景仿真中,能更真實地模擬車窗內(nèi)看到的下雪天氣,已用于模擬駕駛等培訓(xùn)課程中,提高了模擬場景的效果,具有一定的實用價值。
[1]王 乘,周均清,李利軍.Creator可視化仿真建模技術(shù)[M].武漢:華中科技大學(xué)出版社,2005.
[2]肖 鵬,劉更代,徐明亮.OpenSceneGraph三維引擎編程指南[M].北京:清華大學(xué)出版社,2010.
[3]楊化斌.OpenSceneGraph3.0三維視景仿真技術(shù)開發(fā)詳解[M].北京:國防工業(yè)出版社,2012.
[4]孫 鑫,余平安.VC++深入詳解[M].北京:電子工業(yè)出版社,2006.
[5]宋曉偉. 地鐵列車運行控制視景仿真系統(tǒng)中三維建模技術(shù)的研究與實現(xiàn)[D]. 北京:北京交通大學(xué),2007.
[6]胡敏聰,郎誠廉,徐鮮泉,蔣煒棟,牛清華. 列車運行視景仿真及險情特效的實現(xiàn)[J]. 計算機(jī)應(yīng)用,2008(S1):244-246.
責(zé)任編輯 徐侃春
Modeling and simulation of special effects scene of snowy day for train window
ZHANG Ying, LANG Chenglian
( School of Electronics and Information Engineering, Tongji University, Shanghai 200092, China )
Based on the scene simulation of Urban Transit, the paper discussed the special effects technology of threedimension visual simulation, used Creator modeling software to establish the models for the line, the station and the surroundings. The focus of modeling was to create the model of snow and the window. With VC ++ 2005 as a platform, OpenSceneGraph technology was used to drive and control 3D models and implement the human-machine interaction.
modeling; snows; wiper; human-machine interaction; OpenSceneGraph
U29∶TP39
A
1005-8451(2015)09-0010-04
2015-01-05
張 瑩,在讀碩士研究生;郎誠廉,高級工程師。