" />
所屬欄目:機(jī)械論文 發(fā)布日期:2010-08-31 08:48 熱度:
摘要:GLStudio是一個(gè)虛擬儀表開發(fā)軟件。本文介紹了GLStudio的開發(fā)環(huán)境、建模方法、與VC混合編程的方法,并將其應(yīng)用到航空發(fā)動(dòng)機(jī)訓(xùn)練仿真中,開發(fā)了一套發(fā)動(dòng)機(jī)控制顯示面板。
關(guān)鍵詞:仿真;航空發(fā)動(dòng)機(jī);GLStudio
中圖分類號(hào):TP391
來越困難。隨著計(jì)算機(jī)技術(shù)的突飛猛進(jìn),虛擬現(xiàn)實(shí)技術(shù)逐步走向成熟,軍事發(fā)達(dá)國(guó)家都十分重視基于虛擬現(xiàn)實(shí)的仿真訓(xùn)練系統(tǒng)的建設(shè),利用虛擬現(xiàn)實(shí)技術(shù)進(jìn)行訓(xùn)練系統(tǒng)的開發(fā),可以大大提高訓(xùn)練的效果,擺脫實(shí)裝的制約。在訓(xùn)練實(shí)踐中,我軍使用虛擬仿真訓(xùn)練訓(xùn)練系統(tǒng)后,訓(xùn)練效率比傳統(tǒng)方式提高10~20倍,而且可以實(shí)現(xiàn)故障重現(xiàn)、進(jìn)行特情處理訓(xùn)練,使訓(xùn)練效果又上了一個(gè)新臺(tái)階。利用虛擬現(xiàn)實(shí)技術(shù)實(shí)現(xiàn)航空發(fā)動(dòng)機(jī)機(jī)務(wù)訓(xùn)練,需要對(duì)飛機(jī)座艙中發(fā)動(dòng)機(jī)的中大量的儀器面板的行為,如開關(guān)的操作、指針的擺動(dòng)、指示燈的閃爍、旋鈕的轉(zhuǎn)動(dòng)、油門桿的推收等進(jìn)行仿真。發(fā)動(dòng)機(jī)儀表面板的功能、結(jié)構(gòu)復(fù)雜,利用傳統(tǒng)的建模工具,如3DMax、UG等,建模工作量大,效率低,難度大。為此,引進(jìn)了一種新型的建模工具—GLStudio。GLStudio是一個(gè)與操作系統(tǒng)無關(guān)的快速的易用的原型工具,用來創(chuàng)建實(shí)時(shí)的、照片級(jí)別的、可交互的圖形界面,可以創(chuàng)建發(fā)動(dòng)機(jī)的儀表面板。GLStudio編輯器允許一個(gè)圖形藝術(shù)家(美工)迅速而且容易地繪制美觀的圖形界面,并且能快速地建立模型,從而大大降低了建模難度,減小了工作量,提高了效率,而且建模效果非常逼真,可以達(dá)到照片級(jí)的效果。GLStudio還可以生成VisualC++直接可用的代碼,可與程序員熟悉的MFC混合編程。由于其簡(jiǎn)潔高效的開發(fā)方式,GLStudio被譽(yù)為“真實(shí)儀器面板的選擇”。
1利用GLStudio開發(fā)儀表面板
GLStudio是由分布式交互仿真技術(shù)公司(DistributedSimulationTechnologyInc.)開發(fā)的,用于建立實(shí)時(shí)的、三維的、照片級(jí)的交互圖形顯示界面。它能與HLA/DIS(HighLevelArchitecture/DistributedInteractiveSimulation)仿真應(yīng)用相連;生成C++和OpenGL源代碼,并且這些源代碼可以單獨(dú)運(yùn)行,也可以嵌入其它應(yīng)用中。
GLStudio代碼生成器把GLStudio編輯器創(chuàng)建的文件生成C++、Java、涉及安全的C++和OpenGL源代碼。任何可由GLStudio編輯器繪制出的圖形對(duì)象都能生成C++、Java和涉及安全的C++源代碼。代碼生成器允許把對(duì)象組生成為定制的C++類,這些C++類能被輕松集成到用戶的各種應(yīng)用程序中。
1.1設(shè)計(jì)交互式三維圖形
在GLStudio中設(shè)計(jì)交互式三維圖形,一般可以分為如下4個(gè)步驟:
(1)設(shè)計(jì)圖形界面。GLStudio設(shè)計(jì)器是一個(gè)經(jīng)過長(zhǎng)時(shí)間實(shí)踐驗(yàn)證的三維所見即所得的繪制工具。設(shè)計(jì)器有一個(gè)現(xiàn)代的、直觀的用戶圖形界面,包括了用戶所期望的所有現(xiàn)代用戶圖形界面的元素。
(2)生成代碼。GLStudio代碼生成器把GLStudio編輯器創(chuàng)建的文件生成C++、Java、涉及安全的C++和OpenGL源代碼。任何可由GLStudio編輯器繪制出的圖形對(duì)象都能生成C++、Java和涉及安全的C++源代碼。代碼生成器允許把對(duì)象組生成為定制的C++類,這些C++類能被輕松集成到用戶的各種應(yīng)用程序中。
(3)將生成的代碼添加到自己的應(yīng)用程序中。代碼生成器允許把對(duì)象組生成為定制的C++類,這些C++類能被輕松集成到仿真應(yīng)用程序中。
(4)編譯、連接、運(yùn)行,生成可執(zhí)行文件。
GLStudio設(shè)計(jì)器包括兩個(gè)主要的控制窗口和一個(gè)或多個(gè)編輯窗口。除了眾多圖形應(yīng)用程序提供的畫布外,GLStudio設(shè)計(jì)器也包含了結(jié)構(gòu)視圖,它顯示了所有設(shè)計(jì)中的對(duì)象的列表,用一個(gè)可折疊的樹狀結(jié)構(gòu)來顯示。
GLStudio支持照片級(jí)紋理的應(yīng)用。一切多邊形對(duì)象都可以貼紋理。紋理工具可以讓你使用大多數(shù)格式的紋理,如PNG、TIFF、JPEG、SGI、BMP等。紋理能輕松地在對(duì)象上縮放、旋轉(zhuǎn)和平鋪,以達(dá)到所期望的效果。
在圖形界面中,最為重要的元素就是“輸入設(shè)備”(InputDevice)。它是組(group)的一個(gè)子類,包含了組的所有屬性,還有一些額外的特性。輸入設(shè)備是能夠根據(jù)用戶輸入或程序輸入改變狀態(tài)(state)的一組對(duì)象,即輸入設(shè)備可以與用戶交互,例如,把指示燈定制為一個(gè)輸入設(shè)備,則可以定義鼠標(biāo)點(diǎn)擊(事件發(fā)生)時(shí)點(diǎn)亮或熄滅。開發(fā)人員需要為輸入設(shè)備添加事件處理的C++代碼,以處理事件或改變狀態(tài)。這些代碼放在“對(duì)象屬性/輸入設(shè)備”(ObjectProperties/InputDevice)標(biāo)簽的“回調(diào)定義”(CallbackDefinition)域中,有一些預(yù)定義的宏函數(shù)可以利用。回調(diào)函數(shù)將包含在生成的源文件中,用戶在自己編寫的應(yīng)用程序中調(diào)用它們,以響應(yīng)事件,包括鍵盤和鼠標(biāo)事件。
代碼生成器對(duì)話框控制著GLStudio生成代碼的設(shè)置,包括頭文件名、源文件名、代碼輸出路徑、派生類名、實(shí)例名等,這些都要加到用戶的應(yīng)用程序中。應(yīng)用類型(ApplicationType)包括Standalone、glxComponent和wglComponent3種,分別用于將GLStudio代碼獨(dú)立運(yùn)行、加入U(xiǎn)NIX系統(tǒng)已有程序和加入MicrosoftWindows系統(tǒng)已有程序中。在與MFC混合編程時(shí),新建工程向?qū)ё詣?dòng)將所需要的程序文件(如頭文件等)加入到用戶的工程中。
1.2使用GLStudio生成的代碼編程
如上所述,GLStudio生成的代碼有3種類型,由于大多數(shù)的開發(fā)人員使用VisualC++的MFC編程,這里重點(diǎn)介紹GLStudio生成的代碼與MFC的混合編程方法。
(1)GLStudio代碼生成器應(yīng)生成Wglcomponent類型的代碼。
(2)用戶要建立一個(gè)MFCEXE程序,然后將GLStudio生成的頭文件和源文件(包含完整的路徑名)加入工程中。
(3)在自己的應(yīng)用程序中,生成GLStudio生成類的一個(gè)實(shí)例,并使用該類的Draw函數(shù)在窗口中繪制圖形。
(4)在GLStudio中,根據(jù)面板儀表的功能,設(shè)計(jì)輸入/輸出屬性,從而響應(yīng)交互和顯示。在響應(yīng)用戶事件(如鼠標(biāo)事件)時(shí),需要將鼠標(biāo)位置坐標(biāo)傳遞給GLStudio所生成的類,將Windows坐標(biāo)轉(zhuǎn)換為GLStudio下的坐標(biāo)。GLStudio的坐標(biāo)原點(diǎn)在左下角,與Windows的左上角不同。另外,GLStudio與Windows事件消息在種類和描述上都有所不同。
3GLStudio在發(fā)動(dòng)機(jī)仿真中具體應(yīng)用
3.1建模和貼圖處理
建模的基本方法為采用二維儀表技術(shù)來實(shí)現(xiàn)大多數(shù)虛擬儀表,在降低系統(tǒng)資源占用的同時(shí),使其依然具有三維效果。所有的開關(guān)、旋鈕、按鈕、指示燈、表頭、多功能顯示器(MFD)等,都采用二維技術(shù)實(shí)現(xiàn)。對(duì)于油門桿、駕駛桿等,只能采用三維的建模方法實(shí)現(xiàn)。三維模型采用層次結(jié)構(gòu)OpenFlight格式。OpenFlight格式是虛擬現(xiàn)實(shí)技術(shù)標(biāo)準(zhǔn)的數(shù)據(jù)格式,以數(shù)據(jù)庫的結(jié)構(gòu)方式對(duì)模型進(jìn)行后期處理、顯示。圖1就是利用二維技術(shù)實(shí)現(xiàn)的開關(guān)、轉(zhuǎn)速表模型,雖然模型是二維的,但是加上陰影等處理后,顯示效果明顯具有立體感。當(dāng)然,在后期GLStudio處理中要注意Z-Buffer的設(shè)置。
為了提高調(diào)入和渲染速度,貼圖大小要求滿足OpenGL對(duì)圖形圖像驅(qū)動(dòng)的要求,即大小為2m×2n。例如有一幅圖像大小為30×40,則最終處理時(shí)大小應(yīng)為32×64。貼圖的大小盡量不要超過1024×1024。
為了方便改變貼圖的透明度,圖片采用了PNG的格式。
圖1開關(guān)、轉(zhuǎn)速表的模型
3.2創(chuàng)建工程
在VC或VC.Net中生成GLStudio工程。注意VC中的GLStudio工程分為Standalone和Component,為了便于調(diào)試,最初制作時(shí)應(yīng)生成Standalone。在完成基本設(shè)計(jì)之后,根據(jù)需要,后期可以打包生成Component工程,從而生成.dll控件,方便集成后插入其它程序環(huán)境中。
3.3代碼設(shè)計(jì)
對(duì)于不同的面板儀表功能,將其劃分如表1所示幾類。
表1虛擬儀表設(shè)計(jì)分類
例如對(duì)于開關(guān),只需要把其DetenVal值傳出即可。但是對(duì)于多位開關(guān),GLStudio自動(dòng)對(duì)其DtentVal進(jìn)行編號(hào),這種編號(hào)有可能不是我們想要的,而且由于多位開關(guān)的動(dòng)作也是與DtentVal一致的,由GLStudio自動(dòng)編號(hào),所以如果直接用GLStudio中的GlsSwitch來制作有可能達(dá)不到要求,此時(shí)可以把要作的元件轉(zhuǎn)化成基本的InputDevice,通過代碼實(shí)現(xiàn)開關(guān)的動(dòng)作及屬性值的外傳。
在客戶程序中,要把事件消息(例如鼠標(biāo)按下)傳遞給GLStudio生成的代碼,GLStudio的“InputDevice”接收到這個(gè)消息(通常是鼠標(biāo)擊中、鍵盤按下等),才能響應(yīng)用戶的操作,實(shí)現(xiàn)預(yù)先定義的功能。
以鼠標(biāo)左鍵按下為例,在InputDevice的回調(diào)函數(shù)中定義:
ON-MOUSE-DOWN(MOUSE-LBUTTON)
{
……
}
其中,ON-MOUSE-DOWN(MOUSE-LBUTTON)是GLStudio預(yù)定義的宏,表示鼠標(biāo)左鍵按下。
以下是一個(gè)具體的開發(fā)實(shí)例的部分代碼,具體功能為響應(yīng)鼠標(biāo)點(diǎn)擊、拖動(dòng),STICK_1實(shí)現(xiàn)轉(zhuǎn)動(dòng)。
intstick_1Class::moveStick_Class_Cb(InputDevice*self,DisplayEvent*ev)
{
MouseEvent*mev=(MouseEvent*)ev;
stick_1Class*frame=(stick_1Class*)self->Parent();
……
ON_MOUSE_DOWN(MOUSE_RBUTTON)
{
lastx=mev->lx;
lasty=mev->ly;
……
}
……
if(ev->eventSubtype==MOUSE_DRAG)
{
x=mev->lx;
y=mev->ly;
……
STICK_1->DynamicRotate(dx,Y_AXIS);
STICK_1->DynamicRotate(-dy,X_AXIS);
}
return1;
}
其中,stick_1是一個(gè)MFCEXE工程;moveStick_Class是GLStudio的一個(gè)派生實(shí)例;moveStick_Class_Cb是GLStudio中定義的一個(gè)InputDevice。值得注意的是,在響應(yīng)用戶事件(如鼠標(biāo)事件)時(shí),需要將Windows坐標(biāo)轉(zhuǎn)換為GLStudio下的坐標(biāo)。
GLStudio的坐標(biāo)原點(diǎn)在左下角,與Windows的左上角不同。在用戶程序中可以這樣轉(zhuǎn)換:
CRectrect;
GetClientRect(&rect);
mouse.y=rect.bottom2rect.top2point.y;
mouse.x=point.x;
mouse.ly=rect.bottom2rect.top2point.y;
mouse.lx=point.x;
mouse.lz=0;
另外,Windows與GLStudio對(duì)事件消息的描述不一樣,例如,鼠標(biāo)左鍵按下事件,在MFC消息映射時(shí),用OnLButtonDown就可以描述了,但在GLStudio中要描述如下:
MouseEventmouse;
mouse.eventType=EVENT-MOUSE;
mouse.buttonMask=MOUSE-LBUTTON;
mouse.eventSubtype=MOUSE-DOWN;
再者,GLStudio與Windows定義的事件消息種類不同,如GLStudio中有MouseDrag事件,可以直接拖動(dòng)對(duì)象,而Windows中沒有這個(gè)事件,必須通過MouseMove或其他方式來實(shí)現(xiàn)。
3.4系統(tǒng)集成
將建立的發(fā)動(dòng)機(jī)儀表面板發(fā)布成Component,在VC的開發(fā)環(huán)境中進(jìn)行集成。集成后,建立了一個(gè)發(fā)動(dòng)機(jī)操作顯示的座艙環(huán)境。編制發(fā)動(dòng)機(jī)操作邏輯代碼,接受處理虛擬儀表的輸出屬性值,向響應(yīng)儀表輸入屬性進(jìn)行顯示驅(qū)動(dòng),實(shí)現(xiàn)發(fā)動(dòng)機(jī)的訓(xùn)練功能。
4結(jié)束語
在航空發(fā)動(dòng)機(jī)虛擬訓(xùn)練系統(tǒng)中利用GLStudio開發(fā)發(fā)動(dòng)機(jī)面板儀表,建立了仿真度高、易用的。利用GLStudio進(jìn)行面板儀表開發(fā),建模形象逼真、速度快、效率高,生成代碼可讀性好,確實(shí)是儀表面板仿真的開發(fā)利器。
參考文獻(xiàn):
[1]DistributedSimulationTechnologyInc.GLStudioUsersManual.2004.
[2]DistributedSimulationTechnologyInc.GLStudioReleaseNotes.2004.
[3]樊世友,邸彥強(qiáng),朱元昌,GLStudio軟件在視景仿真建模中的應(yīng)用,軍械工程學(xué)院,2001.3.
[4]黃柯棣.系統(tǒng)仿真技術(shù)[M].長(zhǎng)沙:國(guó)防科技大學(xué)出版社,1998
文章標(biāo)題:GL Studio在航空發(fā)動(dòng)機(jī)仿真中的應(yīng)用
轉(zhuǎn)載請(qǐng)注明來自:http://www.anghan.cn/fblw/ligong/jixie/3102.html
攝影藝術(shù)領(lǐng)域AHCI期刊推薦《Phot...關(guān)注:105
Nature旗下多學(xué)科子刊Nature Com...關(guān)注:152
中小學(xué)教師值得了解,這些教育學(xué)...關(guān)注:47
2025年寫管理學(xué)論文可以用的19個(gè)...關(guān)注:192
測(cè)繪領(lǐng)域科技核心期刊選擇 輕松拿...關(guān)注:64
及時(shí)開論文檢索證明很重要關(guān)注:52
中國(guó)水產(chǎn)科學(xué)期刊是核心期刊嗎關(guān)注:54
國(guó)際出書需要了解的問題解答關(guān)注:58
合著出書能否評(píng)職稱?關(guān)注:48
電信學(xué)有哪些可投稿的SCI期刊,值...關(guān)注:66
通信工程行業(yè)論文選題關(guān)注:73
SCIE、ESCI、SSCI和AHCI期刊目錄...關(guān)注:121
評(píng)職稱發(fā)論文好還是出書好關(guān)注:68
復(fù)印報(bào)刊資料重要轉(zhuǎn)載來源期刊(...關(guān)注:51
英文期刊審稿常見的論文狀態(tài)及其...關(guān)注:69
Web of Science 核心合集期刊評(píng)估...關(guān)注:59
理工論文范文
建筑設(shè)計(jì)論文 城市規(guī)劃論文 礦業(yè)論文 機(jī)電一體化論文 包裝論文 交通運(yùn)輸論文 化工論文 電力論文 水力論文 自動(dòng)化論文 車輛論文 冶金論文 工業(yè)設(shè)計(jì)論文 機(jī)械論文
SCI期刊分析
copyright © www.anghan.cn, All Rights Reserved
搜論文知識(shí)網(wǎng) 冀ICP備15021333號(hào)-3