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