【摘 要】基于可視化理論,本文介紹了以O(shè)penGL為工具開發(fā)一個空情仿真系統(tǒng)的具體方法,重點(diǎn)闡述了系統(tǒng)實(shí)時性的實(shí)現(xiàn),三維模型的建立,實(shí)時驅(qū)動模型,視點(diǎn)漫游等技術(shù)的實(shí)現(xiàn)。
【關(guān)鍵詞】可視化 空情仿真 OpenGL
從近期幾場高科技局部戰(zhàn)爭看,空襲作戰(zhàn),遠(yuǎn)程精確打擊已成為現(xiàn)代戰(zhàn)爭的主要作戰(zhàn)方式。做好防隱形飛機(jī)、巡航導(dǎo)彈、武裝直升機(jī)等的打擊和偵察監(jiān)視是奪取未來反空襲作戰(zhàn)勝利的關(guān)鍵。逼真地模擬敵攻擊空情,是防空訓(xùn)練的一個基本前提。本系統(tǒng)利用可視化技術(shù),對導(dǎo)彈、作戰(zhàn)飛機(jī)、武裝直升機(jī)等多種空襲武器進(jìn)行仿真建模、實(shí)時驅(qū)動、同時模擬雷達(dá)對其航跡進(jìn)行實(shí)時監(jiān)測,為部隊(duì)提供一種低成本、高效率的模擬訓(xùn)練方法。
一、空情數(shù)據(jù)可視化
空情數(shù)據(jù)可視化是將空情仿真實(shí)驗(yàn)中獲得的大量數(shù)據(jù)用計算機(jī)圖形圖像的方式來展示,以期把握空情的整體演進(jìn)過程??涨閿?shù)據(jù)可視化屬可視化技術(shù)范疇,它的系統(tǒng)功能包括以下幾方面:a 對空情原始數(shù)據(jù)進(jìn)行可視化處理,為可視化仿真開始作準(zhǔn)備;b 對空情仿真過程進(jìn)行跟蹤和控制,控制仿真向著期望的方向發(fā)展;c對空情仿真數(shù)據(jù)進(jìn)行可視化輸出,以便于對數(shù)據(jù)的正確性進(jìn)行評估。以上三點(diǎn)在可視化仿真系統(tǒng)中的關(guān)系如圖1所示:
除了以上這三項(xiàng)一般可視化功能以外,空情數(shù)據(jù)可視化還要具有獨(dú)特的可視化功能要求,那就是空情背景可視化和視點(diǎn)漫游??涨楸尘爸傅氖撬抡娴目沼騼?nèi)的一般的自然景物如山川,沙漠,建筑物,樹木和自然現(xiàn)象如雨,云,霧等。這些可以增加仿真的真實(shí)性。視點(diǎn)漫游功能可以讓觀察者在系統(tǒng)所描繪的三維空域上任意一點(diǎn)來觀察空情的情況,以便對整個空情的狀況有一個全盤的掌握。
二、基于OpenGL的空情仿真可視化系統(tǒng)的實(shí)現(xiàn)
先就建立仿真程序框架做一說明:建立仿真程序框架首先是用Visual C++的AppWizard和ClassWizard生成一個基于MFC 的應(yīng)用程序框架,得到一個Windows軟件界面,可以是單文檔或多文檔。其次對OpenGL進(jìn)行初始化,由于OpenGL函數(shù)庫與操作系統(tǒng)無關(guān),所以使用OpenGL函數(shù)庫以前要對其進(jìn)行特定的初始化操作,是它與Windows 兼容。OpenGL本身也有專門的初始化函數(shù)可以利用,它的初始化工作包括:設(shè)置像素格式,建立繪圖描述表,清除緩存,光照初始化。下面就本空情仿真可視化系統(tǒng)實(shí)現(xiàn)中的幾個具體問題予以討論:
(一)系統(tǒng)實(shí)時性的實(shí)現(xiàn)
在WINDOWS中實(shí)現(xiàn)實(shí)時性一般是套用計時器的定時發(fā)送功能來實(shí)現(xiàn),使計時器不但充當(dāng)動畫的驅(qū)動器而且讓它擔(dān)負(fù)實(shí)時作用。但是計時器所發(fā)出的WM_TIMER消息的優(yōu)先級不高,只有在windows消息隊(duì)列中沒有其他消息時才處理此消息。這樣如果操作系統(tǒng)忙于其他任務(wù)時,WM_TIMER消息就得不到及時響應(yīng)。
由于實(shí)時空情仿真對實(shí)時性的要求比較高,所以在實(shí)時性的實(shí)現(xiàn)上我們放棄用計時器這種方法,而僅將它作為動畫驅(qū)動器用。在實(shí)時控制上采用基于實(shí)際時間(用操作系統(tǒng)時間來代替)的實(shí)時性方法,即調(diào)用函數(shù)QueryPerformanceCounter(Time)使仿真嚴(yán)格按系統(tǒng)時間來推進(jìn),具體是讓仿真場景中的一切運(yùn)動物體的運(yùn)動均嚴(yán)格基于系統(tǒng)時間而不是幀速率。從而避免了因幀速率難以固定而引起的實(shí)時性失真。這里用本系統(tǒng)的一個移動目標(biāo)(如飛機(jī)等)的軌跡作為例子具體說明這種方法的實(shí)現(xiàn)。此目標(biāo)以勻加速度a做直線運(yùn)動,如圖2所示。
當(dāng)t=t。時,目標(biāo)從P0(R0,E0,bZ0)處進(jìn)入,其中R0為它的起始斜距,bZ0為起始方位角,E0為起始仰角.經(jīng)過Dt 時間到達(dá)P1點(diǎn)(目標(biāo)的起始航向?yàn)閔0,起始俯仰角e0),目標(biāo)的起始速度為V0.由運(yùn)動學(xué)原理和幾何關(guān)系可知:
通過上面這段代碼可以實(shí)現(xiàn)在T1時刻在新位置P1處飛行目標(biāo)的新姿態(tài)的繪制。
(二)空情模型在場景中的繪制
要在場景中繪制目標(biāo)模型,首先根據(jù)目標(biāo)在空中運(yùn)動的運(yùn)動學(xué)方程,分別解算出經(jīng)過Dt時間所運(yùn)動到的新一點(diǎn)的位置量和姿態(tài)參數(shù) ,位置量告訴我們在場景中的什么位置繪,姿態(tài)參數(shù)決定在該位置上模型的確切的姿態(tài)。以上的運(yùn)動參數(shù)可通過下列OpenGL函數(shù)將模型在場景中顯示出來:
…………….
glTranslated (New_x, New_y, New_z); // 新一點(diǎn)的位置量將模型移到新位置上
glRotated (Rotate_x, 1.0, 0.0, 0.0); // 根據(jù)新的姿態(tài)參數(shù)調(diào)整模型姿態(tài)繞x 軸旋轉(zhuǎn)
glRotated (Rotate_y, 0.0, 1.0, 0.0); //模型繞y 軸旋轉(zhuǎn)
glRotated (Rotate_z, 0.0, 0.0, 1.0); // 模型繞z 軸旋轉(zhuǎn)
Draw3DSModel( ); //調(diào)用顯示列表在新位置上用新姿態(tài)參數(shù)重繪3D模型
……………..
至于空情模型在場景中的實(shí)時性驅(qū)動,有關(guān)實(shí)時性上面已經(jīng)討論過,而模型的驅(qū)動依然用計時器實(shí)現(xiàn),此時計時器只充當(dāng)模型的動畫驅(qū)動器角色。
(三)實(shí)時驅(qū)動多個模型
空情仿真系統(tǒng)一般都是對多目標(biāo)多雷達(dá)系統(tǒng)的模擬,所以屬于多模型系統(tǒng),鑒于開發(fā)本系統(tǒng)的主要目的是為了模擬多雷達(dá)采集空中移動目標(biāo)的航跡數(shù)據(jù),各雷達(dá)之間對同一空域所進(jìn)行的偵測可以認(rèn)為是獨(dú)立的,而且各目標(biāo)飛行具有很大的機(jī)動性,也可以認(rèn)為目標(biāo)之間是相互獨(dú)立的 。實(shí)際上各雷達(dá)對目標(biāo)的偵測及各目標(biāo)運(yùn)動是同時進(jìn)行的,所以所開發(fā)的仿真系統(tǒng)也必須體現(xiàn)出各模型的這種并發(fā)性以保證仿真精度和實(shí)時性。要對此進(jìn)行模擬即要采用多線程的并發(fā)執(zhí)行來實(shí)現(xiàn),讓各個線程并行運(yùn)行,共享CPU,這種方法也可加快顯示速度,提高視覺效果。具體是給每個雷達(dá)賦予一個線程,以此來模擬各個雷達(dá)對同一空域各目標(biāo)的獨(dú)立偵測。也給每個目標(biāo)賦予一個線程,使它們獨(dú)立的按各自軌跡飛行,在各個進(jìn)程同時推進(jìn)時必須是基于同一時間參照系(可以以O(shè)S時間為準(zhǔn))實(shí)時地進(jìn)行,以確保仿真精度的要求。圖3展示了空情仿真基于共享CPU 的多模型并發(fā)運(yùn)行的情況。
(四)空情背景的實(shí)時繪制和空情場景的視點(diǎn)漫游
空情背景可用OpenGL的紋理貼圖方式來拼接,接縫處若有痕跡,可用山,樹,建筑物等予以遮擋。 山,樹,建筑物等最好用實(shí)時渲染的三維立體圖來表示,這樣可提高場景的逼真度。本系統(tǒng)中的山采用的是隨機(jī)網(wǎng)格生成法,首先定義山形高程的最大最小值來定出山的陡峭度,再用多階曲線插值的方法,對山進(jìn)行一定的平滑處理,最后再貼以山的紋理和顏色增加逼真度。關(guān)于視點(diǎn)漫游,OpenGL提供了專門的漫游函數(shù)gluLookAt(eyex, eyey, eyez, centerx, centery,centerz,upx,upy,upz)。利用它本系統(tǒng)實(shí)現(xiàn)兩種方式的漫游功能,第一種方式是以觀察者的視點(diǎn)對整個仿真空域的漫游;第二種方法是模擬雷達(dá)的視點(diǎn)跟蹤一個空中目標(biāo),按目標(biāo)的軌跡對整個空域進(jìn)行漫游。
三、結(jié)束語
本文論述可視化原理及其在空情仿真系統(tǒng)中的應(yīng)用實(shí)現(xiàn)。其中利用WINDOWS多任務(wù)的特點(diǎn),在Visual C++ 環(huán)境下,采用了開放式圖形庫OpenGL在微機(jī)上實(shí)現(xiàn)了三維動畫仿真??梢钥闯隹梢暬夹g(shù)在空情仿真應(yīng)用中所發(fā)揮的重要作用。同時本文中提出的一些方法也具有很好的擴(kuò)展性,對于其他可視化系統(tǒng)也具有一定借鑒作用。
參考文獻(xiàn):
[1]徐桄,崔曉寶等. 空戰(zhàn)仿真可視化系統(tǒng)的研究與實(shí)現(xiàn)[J]. 系統(tǒng)仿真學(xué)報 2000,12(6):648~651
[2]翟麗霞,柳松,茅玉龍. 一種用于雷達(dá)系統(tǒng)功能仿真的ActiveX控件的開發(fā)與實(shí)現(xiàn)方法[J]. 雷達(dá)與對抗. 1998,(3):1~4
[3]賈志剛 精通OpenGL[M]北京:電子工業(yè)出版社,1998
[4]費(fèi)廣正,喬林. Visual C++高級編程技術(shù)OpenGL篇[M].北京:中國鐵道出版社,2000
作者簡介:
魏亭(1975—),男,西安工業(yè)大學(xué)講師,主要研究方向?yàn)橹悄軝z測與控制、計算機(jī)網(wǎng)絡(luò)。