河南工程學(xué)院 陶斌
許昌市魏都區(qū)人力資源和社會保障局 梁
飛機三維仿真回放系統(tǒng)的設(shè)計
河南工程學(xué)院 陶斌
許昌市魏都區(qū)人力資源和社會保障局 梁
飛機三維仿真回放系統(tǒng)的設(shè)計主要集中在飛機飛行參數(shù)的分析和處理上。目前,大部分飛機的三維仿真回放系統(tǒng)主要是簡單的二維模擬,不能逼真地再現(xiàn)飛機的飛行過程。本文,筆者設(shè)計的飛機三維仿真回放系統(tǒng)在現(xiàn)有系統(tǒng)的基礎(chǔ)上,進行了大幅度的改進,新系統(tǒng)不但可以下載、處理和分析飛行的參數(shù)和數(shù)據(jù),還可以使用3DMAX和OpenGL軟件實現(xiàn)飛機的飛行姿態(tài)和儀表的三維真實回放。
根據(jù)實際需要,本系統(tǒng)的功能主要包括譯碼、數(shù)據(jù)分析、三維回放和系統(tǒng)文件管理4個部分,系統(tǒng)數(shù)據(jù)流如圖1所示。
1.譯碼。將飛機飛行的數(shù)據(jù)記錄文件中保存的各種飛行參數(shù)值按照規(guī)定的文件格式讀出,并根據(jù)相應(yīng)的計算公式把記錄數(shù)據(jù)轉(zhuǎn)換為飛機的工程數(shù)據(jù)。在數(shù)據(jù)的譯碼過程中,首先會修改錯誤的數(shù)據(jù),然后根據(jù)參數(shù)工程值計算出飛機的航跡曲線和高度曲線,并判斷是否有事故發(fā)生。
2.數(shù)據(jù)分析。將參數(shù)的工程數(shù)據(jù)以曲線、報表、極值和異常數(shù)據(jù)的形式提供給用戶來進行分析和研究。
3.三維回放。對飛機外部的飛行姿態(tài)和飛機內(nèi)部的駕駛艙和各種儀表進行三維回放。在回放過程中用戶可以進行大量的交互操作,如內(nèi)外部的切換、縮放、移動、選擇以及場景的漫游等。此外,由于采用了浮動窗口和輔助窗口使得用戶不但可以在不同的回放方式之間切換移動,還可以在分析系統(tǒng)和回放系統(tǒng)之間任意切換移動。整個飛行過程可以按照時間的順序來播放,用戶可以任意地進行前進、后退和暫停等操作。
4.系統(tǒng)文件的管理。主要包括基于數(shù)據(jù)庫模型文件的修改、轉(zhuǎn)移、刪除和查找等操作。根據(jù)用戶對使用權(quán)限的設(shè)置,該管理模塊可以有效地管理系統(tǒng)的相關(guān)數(shù)據(jù),提高系統(tǒng)的安全性和有效性。
1.模型的建立。飛機三維仿真回放系統(tǒng)中的模型主要分為3種:第1種是形狀結(jié)構(gòu)比較復(fù)雜,但在回放過程中不發(fā)生變化的模型。如飛機、儀表、儀表板等模型。由于這些模型要求具有較強的真實感,所以根據(jù)真實飛機的儀表板模型或照片,利用目前市場上成熟的三維制作軟件3DMAX來制作,并保存為3ds文件格式。第2種三維物體形狀結(jié)構(gòu)比較簡單,是可以直接利用OpenGL的圖元生成函數(shù)和紋理映射函數(shù)來建模的模型。第3種是根據(jù)機場的真實場景和飛機飛行過程中周圍不斷變化的景物進行建模的模型。
2.模型的讀取。對于機場的真實場景,可以利用計算機增強現(xiàn)實技術(shù)對獲取的圖像素材進行圖像處理并快速生成機場的全景圖,在飛機的起降過程中,可以根據(jù)飛機的飛行速度實時地進行同步播放,并且支持多個視角的切換。對于飛行過程中周圍的景物,可根據(jù)清晨、正午、黃昏和夜晚這4個時間段,采集圖像素材并生成全景圖,這樣可以在進行場景漫游時,不至于過于單調(diào),從而失去回放的真實感。
3.模型的繪制。根據(jù)要求制作的3ds文件需要定義一些相應(yīng)的數(shù)據(jù)結(jié)構(gòu)和存放這些數(shù)據(jù)結(jié)構(gòu)的數(shù)組,然后讀取文件將數(shù)據(jù)填入相應(yīng)的數(shù)據(jù)結(jié)構(gòu)中,最后將這些數(shù)據(jù)結(jié)構(gòu)組合后形成輸出數(shù)據(jù)結(jié)構(gòu),它們將在繪制程序中被使用。在系統(tǒng)中根據(jù)3ds文件格式生成的數(shù)據(jù)結(jié)構(gòu)有攝像機、光源、幾何實體、實體紋理和坐標變換。3D對象的繪制主要是由C3Dobject中的Draw3dsObject()函數(shù)來完成的,對象的外部性質(zhì)是則是采用三角形來近似。由于全景圖的播放需要與飛行速度相同步。所以,為了能夠更好地實現(xiàn)同步,本文,筆者采用圖像分塊和算法壓縮全景圖的策略來完成,即將圖像劃分成相同尺寸的子圖,并分別壓縮,依次存放在不同的文件中,在生成視圖時根據(jù)時間順序讀取一定數(shù)量的連續(xù)子圖,然后對子圖解壓縮并進行投影,最終生成全景圖。子圖劃分的尺寸和讀取的數(shù)量與飛行速度的關(guān)系由相應(yīng)的算法進行處理。
1.模型動畫生成。在經(jīng)過模型建立和讀取以后,接下來的步驟就是生成動畫了。該系統(tǒng)主要是利用時間來驅(qū)動模型運動。具體采用了VC中的定時器函數(shù)來實現(xiàn),即用SetTimer()函數(shù)來建立一個定時器,在OnTimer()函數(shù)中定義模型的運動。利用飛行參數(shù)來驅(qū)動模型以及控制模型和場景的變化,即由定時器定時的驅(qū)動程序讀取當(dāng)前時間的飛行數(shù)據(jù),并將數(shù)據(jù)和場景相結(jié)合動態(tài)地繪制出來,從而達到動畫的效果。在該系統(tǒng)中生成的動畫主要有飛行姿態(tài)、儀表板、各種儀表、二維軌跡、三維軌跡和全景圖等。
2.使用OpenGL構(gòu)建系統(tǒng)。為了實現(xiàn)飛行姿態(tài)的回放,首先需要獲得當(dāng)前時間飛機的飛行參數(shù)值,主要有飛機飛行的俯仰角、航向角和傾斜角等和機身震動的法向過載、側(cè)向過載和縱向過載。然后根據(jù)這些數(shù)據(jù),利用OpenGL中的glRotatef()旋轉(zhuǎn)函數(shù),通過旋轉(zhuǎn)機身來體現(xiàn)當(dāng)前飛行中的角度變化。同理,利用OpenGL中的glTranslatef()平移函數(shù)和glScalef()縮放函數(shù),通過在X、Y、Z軸移動或是縮放飛機位置來體現(xiàn)當(dāng)前飛機的飛行模擬。具體代碼如下所示:
if(m_nState < 0)
3.播放速度匹配。在飛機的起降和飛行回放過程時,利用算法對讀取到的飛機飛行速度與全景圖的播放速度進行匹配,從而實現(xiàn)與背景播放速度的同步。同時,為避免跳躍現(xiàn)象的產(chǎn)生,還應(yīng)在相鄰幀之間進行線性插值,使仿真效果更為平滑,具體代碼如下所示:
4.增加音響效果。在模擬飛機內(nèi)部儀表的回放時,由于儀表指針和其他部分元件是分開建模的,所以在進行儀表回放時,只有儀表針隨著數(shù)據(jù)變化而運動,而儀表的其他部分不進行運動。該系統(tǒng)還給飛機駕駛艙中的儀表配上各種真實的音響效果,這樣就進一步地增加了使用者身臨其境的真實感。
5.增加三維效果的其他手段。在該三維回放系統(tǒng)中,還可利用其他手段進一步來體現(xiàn)三維效果,使回放更加生動。例如,使用粒子系統(tǒng)實現(xiàn)了飛機尾焰的模擬,使用陰影技術(shù)生成各種物體的陰影,使用BMP圖像作為紋理文件以突出真實的紋理效果等等。為了使用戶能夠更好地使用該系統(tǒng),系統(tǒng)還提供了一些交互的功能。主要包括對象的選取、反饋、選取后的縮放、平移操作以及飛機內(nèi)部和外部的場景漫游等。這些功能主要是基于OpenGL軟件來實現(xiàn)的。例如,對象選取主要是利用了OpenGL中的名字堆棧來實現(xiàn)的,利用OpenGL中的gluLookAt()函數(shù)來實現(xiàn)場景漫游。
本文,筆者設(shè)計了1種飛機三維仿真回放系統(tǒng),利用3DMAX和OpenGL軟件及計算機增強現(xiàn)實技術(shù)對現(xiàn)有回放系統(tǒng)作出了較大的改進,進一步提高了回放系統(tǒng)的實時交互性和三維效果。系統(tǒng)可以有效地回放在不同時間、不同地點和不同環(huán)境下飛機的飛行狀況,基于多窗口顯示的設(shè)計也有效地滿足了不同情況下的需要。因此,該系統(tǒng)在飛行安全問題和培訓(xùn)等方面,都有著十分廣泛的應(yīng)用前景。