胡德生,崔國(guó)恒,張?zhí)旌?/p>
(海軍工程大學(xué)管理工程系,武漢 430033)
潛艇作為一種水下作戰(zhàn)武器,其潛望鏡的戰(zhàn)術(shù)作用不可忽視,指揮員的航行、作戰(zhàn)等指令決策很大程度上要依靠潛望鏡的觀察情況,因此對(duì)潛望鏡視景的模擬尤為重要。為此,利用Vega平臺(tái)開(kāi)發(fā)設(shè)計(jì)了潛艇潛望鏡視景仿真系統(tǒng),該系統(tǒng)可以用于潛艇航海模擬訓(xùn)練。
近年來(lái)出現(xiàn)了多種虛擬作戰(zhàn)視景仿真需要的仿真支撐軟件,如OpenGL、Vetree、3Dmax等。而實(shí)時(shí)三維建模和仿真軟件MultiGen Creator和Vega由于其先進(jìn)的功能在包括軍事等各個(gè)工程領(lǐng)域的視景仿真開(kāi)發(fā)中得以廣泛采用[1]。
MultiGen Creator是一套高逼真度、最佳優(yōu)化的實(shí)時(shí)三維建模工具,擁有強(qiáng)大的多邊形建模、矢量建模、大面積地形精確生成功能以及多種專(zhuān)業(yè)選項(xiàng)和插件,能高效、優(yōu)化地生成實(shí)時(shí)三維(RT3D)數(shù)據(jù)庫(kù),并與后續(xù)的實(shí)時(shí)仿真軟件緊密結(jié)合,完成視景仿真。它的諸如層次細(xì)節(jié)(LOD)、多邊形篩選、邏輯篩選、繪圖優(yōu)先級(jí)以及分離面等高級(jí)實(shí)時(shí)功能使得OpenFlight(.flt)數(shù)據(jù)格式在實(shí)時(shí)三維領(lǐng)域中成為標(biāo)準(zhǔn)的文件格式。
Vega是開(kāi)發(fā)實(shí)時(shí)視覺(jué)和聽(tīng)覺(jué)仿真、虛擬現(xiàn)實(shí)應(yīng)用的業(yè)界領(lǐng)先的軟件環(huán)境,它包括圖形開(kāi)發(fā)環(huán)境Lynx、一套應(yīng)用編程接口、一系列相關(guān)的庫(kù)、Audio Works2實(shí)時(shí)多通道音響系統(tǒng)以及豐富的可選模塊等,以增強(qiáng)在特定應(yīng)用中的功能。在Vega的圖形界面Lynx中,把用Creator建立的各種flt模型文件添加到場(chǎng)景中;可實(shí)時(shí)調(diào)整通道、窗口、視點(diǎn)、觀察者等的狀態(tài),隨時(shí)改變時(shí)間設(shè)定、系統(tǒng)配置、加入特殊效果等。Vega配合Lynx的功能模塊,定義了27個(gè)核心類(lèi),以對(duì)這些模塊對(duì)象進(jìn)行編程管理,還提供了豐富的頭文件,實(shí)現(xiàn)Vega類(lèi)、參數(shù)、常數(shù)、圖形以及聲音等對(duì)象的API定義。
根據(jù)視景仿真設(shè)計(jì)實(shí)現(xiàn)的功能,將系統(tǒng)分成四個(gè)模塊進(jìn)行管理(見(jiàn)圖1)。
圖1 潛望鏡視景仿真系統(tǒng)模塊組成
(1)潛望鏡的基本控制功能模塊。主要包括潛望鏡高度調(diào)整、視角調(diào)整(轉(zhuǎn)動(dòng)和俯仰)、視野調(diào)整(放大倍率)、濾色鏡選擇、測(cè)距和裂像等。
(2)視景控制模塊。觀察目標(biāo)姿態(tài)設(shè)置和控制,能夠?qū)崟r(shí)添加/刪除觀察目標(biāo)、設(shè)置/改變觀察目標(biāo)的參數(shù)(航速、航向、位置等)、控制其碰撞檢測(cè)等;能夠?qū)r、天氣、時(shí)間、能見(jiàn)度等外部環(huán)境進(jìn)行設(shè)置。
(3)本艇運(yùn)動(dòng)仿真模塊。給出本艇運(yùn)動(dòng)的主要參數(shù)(位置、深度、航速、航向、縱傾、橫傾等姿態(tài)信息),實(shí)現(xiàn)潛望鏡與本艇的動(dòng)態(tài)姿態(tài)匹配。
(4)視景生成顯示模塊。根據(jù)以上模塊提供的信息實(shí)時(shí)生成并顯示逼真的動(dòng)態(tài)視景畫(huà)面。
3.2.1 實(shí)體建模
本系統(tǒng)需建立的模型有艦艇類(lèi),包括航母、驅(qū)逐艦、護(hù)衛(wèi)艦、艦載直升機(jī)。使用 MultiGen Creator 2.4.1能方便地建立Vega使用的各個(gè)模型,包括確定模型種類(lèi)、模型尺碼、基本的X、Y、Z和H、P、R的方向、模型紋理、模型朝向、位置以及模型最大的多邊形數(shù)量等。模型建好后,利用MultiGen Creator簡(jiǎn)化工具進(jìn)行優(yōu)化,達(dá)到在保證效果的前提下提高渲染速度、保證刷新頻率。建立的實(shí)體模型如圖2(a)、圖2(b)所示。
圖2 實(shí)體模型示例
3.2.2 創(chuàng)建 adf文件
使用Lynx設(shè)置基本的視景開(kāi)發(fā)環(huán)境,主要包括:
(1)通道(channel):采用雙通道非對(duì)稱投影視圖模式。
(2)窗口(screen):設(shè)置全屏幕顯示模式。
(3)環(huán)境(environment)及各種效果(environment/special effect):建立海洋模型、海洋特效(艦船的波浪和尾流)、雨雪、爆炸以及煙火等特效。
3.2.3 視景編程
利用可視化的應(yīng)用程序開(kāi)發(fā)工具VC++編寫(xiě)了基于MFC的Vega應(yīng)用程序,實(shí)現(xiàn)了潛望鏡視景場(chǎng)景的驅(qū)動(dòng)和渲染。主要的幾個(gè)方面作了如下處理:
(1)對(duì)object進(jìn)行結(jié)構(gòu)化管理。為了有效管理object的各種信息(靜態(tài)、動(dòng)態(tài)屬性以及添加/刪除指令、特效等控制信息),定義了object結(jié)構(gòu)。
BOOL bActive;//object活動(dòng)狀態(tài)
vgPlayer*Plyr;//object的角色對(duì)象
awSound*enginesound;//object的聲音效果
vgMarineFx*bowwave;//object的首浪效果
vgMarineFx*trailstream;//object的尾流效果
vgFx*explode;//導(dǎo)彈命中目標(biāo)后,爆炸效果
vgFx*fire;//導(dǎo)彈命中目標(biāo)后,燃燒效果(火)
vgFx*smoke;//導(dǎo)彈命中目標(biāo)后,燃燒效果(煙)
vgPosition*pos;//object的位置
int iType;//object的類(lèi)型
float fSpeed;//object的速度
(2)使用fst模型文件格式載入模型。Vega提供了一種轉(zhuǎn)換工具可以把a(bǔ)df文件里的flt模型文件轉(zhuǎn)換為fst文件格式[2-3]。Vega的fst文件格式為系統(tǒng)盡可能快的加載模型到場(chǎng)景中提供了一種有效的途徑。fst文件的數(shù)據(jù)方式與Vega場(chǎng)景里需要的方式非常相似,所以可以非??斓妮d入。其他的文件格式在加入Vega場(chǎng)景時(shí)對(duì)系統(tǒng)運(yùn)行時(shí)間沒(méi)有什么影響,但在系統(tǒng)需要?jiǎng)討B(tài)實(shí)時(shí)調(diào)入模型數(shù)據(jù)尤其是大規(guī)模模型數(shù)據(jù)時(shí)就有很大的延時(shí),影響渲染效果。
(3)視景觀察者的控制。潛望鏡作為視景環(huán)境的觀察者,這里采用手動(dòng)調(diào)整方式(Manual)來(lái)控制它在場(chǎng)景中的位置和姿態(tài)。視景渲染進(jìn)程循環(huán)中實(shí)時(shí)接收潛望鏡的控制信息和潛艇的運(yùn)動(dòng)姿態(tài)數(shù)據(jù),更新觀察者的位置和姿態(tài),給出潛望鏡與本艇結(jié)合的動(dòng)態(tài)效果。
(4)創(chuàng)建單獨(dú)的線程完成Vega渲染的任務(wù)。MFC把線程分為兩類(lèi)——用戶界面線程(User Interface Thread)和工作者線程(Worker Thread)。用戶界面線程一般用于處理用戶輸入事件并對(duì)事件做出響應(yīng),實(shí)現(xiàn)線程的代碼中含有消息循環(huán);工作者線程與用戶界面無(wú)關(guān),主要用于各種耗時(shí)的計(jì)算量大的場(chǎng)合[4]。Vega系統(tǒng)需要實(shí)時(shí)進(jìn)行渲染循環(huán),這是個(gè)非常耗時(shí)的計(jì)算過(guò)程,顯然創(chuàng)建單獨(dú)的工作者線程來(lái)完成Vega渲染的任務(wù)是恰當(dāng)?shù)摹?/p>
(5)碰撞檢測(cè)和特效處理。使用Isector實(shí)例與視景中的角色對(duì)象(Player)綁定,根據(jù)相交測(cè)試結(jié)果實(shí)時(shí)增加爆炸、煙火等特效??紤]到相交測(cè)試的計(jì)算量對(duì)CPU的占用,這里只選取相交點(diǎn)坐標(biāo)和相交模型對(duì)象名稱兩種相交測(cè)試的結(jié)果信息進(jìn)行處理,減少相交測(cè)試的計(jì)算量。
應(yīng)用程序?qū)崿F(xiàn)的視景效果截屏如圖3所示。
(1)潛望鏡視景仿真的設(shè)計(jì)功能模塊清晰,結(jié)構(gòu)合理,便于系統(tǒng)維護(hù)與二次開(kāi)發(fā)。
(2)使用三維建模和仿真軟件MultiGen Creator和Vega開(kāi)發(fā)的視景模塊,動(dòng)態(tài)效果逼真,實(shí)時(shí)性強(qiáng),是虛擬現(xiàn)實(shí)技術(shù)的一種有效實(shí)現(xiàn)方法。
圖3 潛望鏡視景效果截屏
(3)對(duì)潛艇訓(xùn)練、戰(zhàn)術(shù)研究等有一定的使用價(jià)值。
[1]梁永恩,鄒勇,丁方頤.Creator/Vega及其在船舶航行視景仿真系統(tǒng)中的應(yīng)用[J].應(yīng)用科技,2005,32(4):37-39.
[2]葉疊,仲梁維,羅云.基于Vega/MultiGen的三維仿真漫游系統(tǒng)的研究與實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(2):362 -363.
[3]熊芝蘭,郝燕玲,申冬慧.基于數(shù)字海洋環(huán)境的視景仿真系統(tǒng)研究[J].系統(tǒng)仿真學(xué)報(bào),2005,17(7):1631-1633.
[4]龔卓容.Vega程序設(shè)計(jì)[M].北京:國(guó)防工業(yè)出版社,2002.