黃 旭 何傳易 楊德輝
(中國人民解放軍93199部隊司令部信息管理中心,黑龍江 哈爾濱150006)
隨著虛擬仿真技術(shù)的不斷發(fā)展和創(chuàng)新,使得將飛機座艙搬進教室成為可能。筆者結(jié)合某型飛機座艙儀表多、參數(shù)交聯(lián)復(fù)雜的特點,選擇了開發(fā)周期短、組件復(fù)用性好的GL Studio軟件來實現(xiàn)虛擬儀表仿真開發(fā),并采用Vega Prime進行3D場景驅(qū)動,實現(xiàn)了GL Studio組件與Vega Prime間的結(jié)合和交互控制。
GL Studio是由美國DiSTI公司開發(fā),使用OpenGL圖形庫建立實時、照片級、交互式圖形的虛擬儀表仿真程序的軟件。它獨立于平臺,可以運行于Windows NT、IRIX和Linux操作系統(tǒng)上。GL Studio提供了友好的設(shè)計界面,其代碼生成器能把美工人員設(shè)計繪制好圖形文件一鍵生成c++和OpenGL的源代碼,生成的可以源代碼單獨運行,也可以嵌入其他應(yīng)用程序中。此外GL Studio組件的復(fù)用性極好,由GL Studio設(shè)計器創(chuàng)建的對象能容易地轉(zhuǎn)變成一個組件對象,當(dāng)一個組件對象創(chuàng)建之后,就可以輕松地重復(fù)使用該對象[1]。
GL Studio是基于對象的虛擬儀表開發(fā)工具,將對象的開發(fā)過程分成建立圖形對象和建立行為代碼兩部分,前者由美工人員完成,后者則由編程人員完成。
其基本的開發(fā)流程如圖1所示。
圖1 GL Studio基本開發(fā)流程
美工人員收集真實儀表圖片素材,經(jīng)過紋理提取和修飾以后,使用GL Studio的設(shè)計器進行界面布局,并對創(chuàng)建的對象有效地命名(符合C++命名規(guī)則及要求);編程人員除需掌握基本的C++語言編程技術(shù)外,還需熟悉儀表知識,并根據(jù)儀表功用,在界面設(shè)計基礎(chǔ)上創(chuàng)建對象的動作代碼,經(jīng)過測試集成后發(fā)布最終仿真程序。
飛機座艙儀表仿真要求虛擬儀表能及時影響用戶操作,并能實時動態(tài)地顯示仿真數(shù)據(jù),實現(xiàn)輸入設(shè)備與顯示部件之間的數(shù)據(jù)交互功能。常用到的輸入設(shè)備包括開關(guān)、按鈕、旋鈕等,GL Studio對大多數(shù)類型的輸入設(shè)備提供了封裝插件,大大減輕了開發(fā)人員的工作量。對于一些不常用的操作部件,則可以利用InputDevice控件通過編程響應(yīng)鼠標(biāo)事件來實現(xiàn)。
儀表設(shè)備基本顯示部件包括指針、指示燈、數(shù)字滾輪刻度盤、LED數(shù)碼管等。對于指針和指示燈類的顯示部件,GL Studio提供了大量函數(shù)進行指示控制,常用的函數(shù)有:
●動態(tài)旋轉(zhuǎn):DynamicRotate(float,int);
●動態(tài)平移:DynamicTranslate(float,float,float,bool);●動態(tài)縮放:DynamicScale(const Vector&);●閃爍:Blinking(bool);
●顯示/隱藏: Visibility(bool);
對于數(shù)字滾輪刻度盤,GL Studio提供了GlsOdometer對象,用戶僅需設(shè)置好參數(shù)即可復(fù)雜的數(shù)字滾輪刻度盤功能;對于LED數(shù)碼管則可以使用GlsTextGrid字符類對象來實現(xiàn)。
GL Studio提供的大量的封裝插件和指示控件函數(shù),實現(xiàn)了儀表數(shù)據(jù)的實時交互和動態(tài)顯示,逼真地還原了儀表的工作狀態(tài)。此外,用戶還可以使用PLAY_SOUND(o,index)宏播放指定編號的聲音,來響應(yīng)用戶的鼠標(biāo)操作,從而進一步增強操作的真實感。
Vega Prime是由MultiGen-Paradigm公司推出的最新VR開發(fā)平臺,具有面向?qū)ο蟆⒐δ軓姶?、界面友好、平臺兼容性好等特點[2]。其基本開發(fā)流程包括建立模型、場景設(shè)置和編寫驅(qū)動控制程序三部分:建立模型主要是完成各種仿真對象和地形等的3D建模工作,通常用第三方工具如 GL Studio(儀表)、3DMAX、Creator、Terravista(地形)等完成;場景設(shè)置指利用LynX Prime對應(yīng)用程序及場景進行基本的配置,包括應(yīng)用參數(shù)配置(如窗口、通道等參數(shù))、環(huán)境設(shè)置、對象初始位置姿態(tài)設(shè)置以及某些特效設(shè)置等,設(shè)置完成后生成*.acf配置文件供程序加載使用;編寫驅(qū)動控制程序則是利用Vega Prime的應(yīng)用程序編程接口(API),在VC++環(huán)境下實現(xiàn)VR仿真驅(qū)動控制程序的編寫、調(diào)試和發(fā)布,本文采用的是VS.NET2005(對應(yīng)VC8.0版本)編程環(huán)境。
VC++工程類型可以分為:控制臺(Console)應(yīng)用程序、Windows應(yīng)用程序和基于MFC的應(yīng)用程序。MFC是比較流行的基于文檔/視圖結(jié)構(gòu)的應(yīng)用程序框架,封裝了大量的Windows API函數(shù),已成為開發(fā)Windows應(yīng)用程序的主流框架結(jié)構(gòu),而標(biāo)準(zhǔn)的Vega Prime視景仿真程序為控制臺應(yīng)用程序。為此我們將標(biāo)準(zhǔn)的Vega Prime仿真驅(qū)動程序改造成基于MFC對話框的驅(qū)動程序。
改造后的驅(qū)動控制程序在MFC對話框進程完成對話框初始化,啟動Vega Prime渲染進程完成系統(tǒng)初始化、定義、配置、仿真循環(huán)等工作。初始化用來VP系統(tǒng)初始化,創(chuàng)建內(nèi)存等;定義、配置是通過讀取和解析LynX Prime應(yīng)用程序生成的*.a(chǎn)cf場景設(shè)置文件,創(chuàng)建三維模型,建立仿真對象與C++類之間的關(guān)系,完成場景加載工作;仿真循環(huán)則是根據(jù)仿真數(shù)據(jù),完成場景渲染、漫游控制、數(shù)據(jù)交互等工作,在MFC下我們使用定時器對幀循環(huán)進行頻率控制,從而保證數(shù)據(jù)同步。
在GL Studio中完成飛機座艙儀表面板的制作后,可以利用VC將 GL Studio 模型文件(*.gls)制作成動態(tài)鏈接庫文件(*.dll文件)。 虛擬場景創(chuàng)建完畢之后,需將做好的飛機座艙虛擬面板的動態(tài)連接庫文件導(dǎo)入虛擬場景中,但Vega Prime本身并不支持GL Studio模型的直接加載,因此需要安裝配套的vpGLStudioPlugin插件,該插件使Lynx Prime場景編輯器可以直接加載GL Studio生成的動態(tài)鏈接庫文件,并將其生成為一個vpGLStudioComponent類,方便地實現(xiàn)了GL Studio組件與Vega Prime的交互控制功能,大大降低了系統(tǒng)的開發(fā)難度和成本。
使用vpGLStudioComponent類中的setAtrib函數(shù)可以將仿真數(shù)據(jù)傳遞給GL Studio虛擬儀表面板,從而控制儀表的狀態(tài)、動作和顯示數(shù)據(jù),該函數(shù)傳遞的數(shù)據(jù)類型為字符型,因此在傳遞前需進行數(shù)據(jù)類型轉(zhuǎn)換。
不同儀表面板之間,儀表面板與仿真驅(qū)動程序間的數(shù)據(jù)交換則可以使用網(wǎng)絡(luò)通信、消息傳遞等方式進行傳遞。
當(dāng)虛擬儀表面板上的元件發(fā)生動作時,向仿真驅(qū)動程序窗口發(fā)送消息:
飛機虛擬座艙系統(tǒng)對飛機、機場和地形等各種仿真對象進行了3D建模工作,采用GL Studio制作虛擬儀表仿真程序,利用Vega Prime進行系統(tǒng)的場景仿真驅(qū)動,飛機的仿真數(shù)據(jù)由飛行解算程序仿真計算得出,通過網(wǎng)絡(luò)通信采用無連接的UDP協(xié)議方式與系統(tǒng)進行數(shù)據(jù)交換。完成后的飛機虛擬座艙系統(tǒng)運行界面及效果如圖2所示。
圖2 飛機虛擬座艙系統(tǒng)運行效果
虛擬現(xiàn)實技術(shù)在飛行領(lǐng)域有廣泛的應(yīng)用前景,特別在航空理論教學(xué)中,虛擬現(xiàn)實技術(shù)的應(yīng)用不僅能激發(fā)學(xué)員的學(xué)習(xí)興趣,提高教學(xué)效率,而且安全可控、易于復(fù)制,降低了教學(xué)成本。本文通過某型飛機虛擬座艙系統(tǒng)的研究與實現(xiàn),為航理教、學(xué)人員提供了逼真的飛機虛擬座艙仿真環(huán)境,同時也建立了基于Vega Prime的虛擬仿真程序的基本開發(fā)流程和程序框架,為開發(fā)其它虛擬現(xiàn)實仿真程序提供了參考和基礎(chǔ)。
[1]于輝,趙經(jīng)成,等.GL Studio虛擬儀表技術(shù)應(yīng)用與系統(tǒng)開發(fā)[M].國防工業(yè)出版社,2010.
[2]王孝平,董秀成,等.Vega Prime實時三維虛擬現(xiàn)實開發(fā)技術(shù)[M].西南交通大學(xué)出版社,2012.
[3]李萬,王學(xué)軍,崔小鵬.GL Studio與Vega Prime在某艦炮虛擬訓(xùn)練仿真系統(tǒng)中的應(yīng)用[J].火炮發(fā)射與控制學(xué)報,2010,6.
[4]陳懷民,吳錦雯,黃曉波.基于GL Studio的飛行仿真虛擬儀表軟件設(shè)計與實現(xiàn)[J].測控技術(shù),2013.
[5]楊建國,王乘.基于Multigen和Vega的虛擬現(xiàn)實技術(shù)[J].計算機仿真,2003.