摘要:本文分析了Vega 開發(fā)環(huán)境的主要特點(diǎn)及Lynx各個(gè)模塊的功能,重點(diǎn)討論了在Vega 環(huán)境下利用Lynx開發(fā)虛擬現(xiàn)實(shí)應(yīng)用程序的主要過程,從而完成虛擬仿真軟件的開發(fā)。
關(guān)鍵詞:Vega;Lynx;應(yīng)用程序接口
中圖分類號(hào):TP391.9 文獻(xiàn)標(biāo)識(shí)碼:A
1 引言
目前在視景仿真領(lǐng)域用于視景場(chǎng)景管理的軟件種類復(fù)雜,比較流行的有MultiGen Vega、OpenGVS、Vtree、WTK、OpenInvetor等。每種軟件都有各自不同的特點(diǎn),各個(gè)公司也有自己不同的營(yíng)銷策略。其中Vega作為當(dāng)前實(shí)時(shí)視景仿真領(lǐng)域的主流高層開發(fā)平臺(tái),是一種高性能的場(chǎng)景管理軟件,用于實(shí)時(shí)視景仿真、虛擬現(xiàn)實(shí)、科學(xué)計(jì)算可視化等。Vega具有很好的圖形環(huán)境界面,豐富的應(yīng)用程序接口API和實(shí)用函數(shù)庫(kù)以及大量功能模塊,可以為復(fù)雜的應(yīng)用方便快捷地建立場(chǎng)景模型數(shù)據(jù)的驅(qū)動(dòng)。
2 Vega軟件簡(jiǎn)介
Vega是MultiGen-Paradigm公司推出的實(shí)時(shí)視景仿真軟件環(huán)境,主要包括兩個(gè)方面:一是可視化的圖形編程環(huán)境Lynx;二是完整的C語(yǔ)言應(yīng)用程序接口API。Lynx是點(diǎn)擊式圖形環(huán)境,只需鼠標(biāo)點(diǎn)擊就可以驅(qū)動(dòng)圖形,可以快速、容易地改變應(yīng)用性能、顯示通道、多CPU資源分配、視點(diǎn)、特殊效果、運(yùn)行時(shí)間、系統(tǒng)配置、模型和數(shù)據(jù)庫(kù)等等,而這些都不涉及源碼。它能夠使用戶在極短的時(shí)間內(nèi)開發(fā)出完整的實(shí)時(shí)仿真應(yīng)用。它將最后的仿真應(yīng)用程序存儲(chǔ)為ADF(Application Definition File)格式。通過C語(yǔ)言接口來實(shí)現(xiàn)對(duì)視景仿真應(yīng)用進(jìn)行軟件控制,使用戶實(shí)現(xiàn)更靈活的視景仿真系統(tǒng)。所有的Vega應(yīng)用程序接口包括頭文件、相關(guān)類及函數(shù)命名都以Vg開頭。每一個(gè)Vega類是一個(gè)完整的控制結(jié)構(gòu),可以隨意地設(shè)置和改變模型的屬性。
LynX提供了很多功能模塊,大大提高了仿真對(duì)象模型構(gòu)造效率。借助LynX,只需修改某些參數(shù),不用編寫任何代碼或進(jìn)行編譯處理,就可以構(gòu)造出仿真對(duì)象模型。在仿真對(duì)象模型中,可以指定可見對(duì)象、操縱方式、運(yùn)動(dòng)方式、視點(diǎn)與操縱對(duì)象間的關(guān)系、顯示通道、光照環(huán)境、云霧、運(yùn)動(dòng)對(duì)象與其他對(duì)象間交叉關(guān)系、聲音及觸發(fā)方式等。Lynx編程環(huán)境的具體作用為:
(1) 圖形用戶界面軟件(運(yùn)行Lynx軟件,顯示界面);
(2)以圖形界面的形式,供用戶設(shè)置環(huán)境、操作參數(shù)等;
(3) 定義、生成和預(yù)覽Vega應(yīng)用程序;
(4) 參數(shù)設(shè)置結(jié)果生成、存儲(chǔ)在ADF文件。
3 利用Lynx編程環(huán)境進(jìn)行二次開發(fā)
我們利用Lynx編程環(huán)境進(jìn)行二次開發(fā)時(shí),首先要用Lynx編程環(huán)境建立一個(gè)最簡(jiǎn)單的ADF文件。由于它的各類參數(shù)已自動(dòng)設(shè)置(缺省值),各類之間的關(guān)聯(lián)已自動(dòng)建立。我們只需要編程實(shí)現(xiàn)對(duì)少量特定參數(shù)的設(shè)置或修改,就可以實(shí)現(xiàn)特定的目標(biāo)。
關(guān)于Lynx編程環(huán)境需要注意的是:
(1)Lynx編程環(huán)境首先用缺省值為每一個(gè)類設(shè)置參數(shù);
(2)Lynx編程環(huán)境自動(dòng)建立各類之間的關(guān)聯(lián)關(guān)系;
(3)用戶使用Lynx編程環(huán)境實(shí)際上是對(duì)缺省值進(jìn)行修改,以實(shí)現(xiàn)特定的目標(biāo)。
關(guān)于Vega類需要注意的是:
(1)類內(nèi)一些參數(shù)是必設(shè)項(xiàng),必須設(shè)置;
(2)類與類之間存在著關(guān)聯(lián),必須正確建立這些關(guān)聯(lián)關(guān)系;
(3)二次開發(fā)編程必須用語(yǔ)句實(shí)現(xiàn)每一種關(guān)聯(lián)關(guān)系。
利用Lynx編程環(huán)境建立ADF文件,并用ADF文件設(shè)置系統(tǒng),可以使我們將精力集中在特定的問題上,大大減少編程工作量。
用Lynx建立一個(gè)ADF文件,我們需要注意:三維模型文件是以O(shè)bject的形式調(diào)入的,經(jīng)歷了文件到數(shù)據(jù)集(DS),最后投入場(chǎng)景(Scenes)的過程;Observer與Motion關(guān)聯(lián)在一起,通過對(duì)Motion的控制實(shí)現(xiàn)對(duì)Observer的運(yùn)動(dòng)控制。通過以上關(guān)聯(lián),我們?cè)O(shè)定需要的參數(shù),許多的選項(xiàng)可以采用默認(rèn)選項(xiàng)。完成后保存的ADF文件,我們可以用“記事本”打開該文件,顯示其內(nèi)容及存儲(chǔ)數(shù)據(jù)格式。
Vega有三種應(yīng)用程序模型:
(1)經(jīng)典模型,主程序?yàn)閙ain();
(2)標(biāo)準(zhǔn)的Windows應(yīng)用程序,主程序?yàn)閃inMain();
(3)基于MFC的Windows應(yīng)用程序。
其應(yīng)用程序模式如下:
vgInitSys();//初始化系統(tǒng)
vgDefineSys( \"myapp.adf\" );//定義系統(tǒng)
vgConfigSys(); //設(shè)置系統(tǒng)
while( 1 ) {//實(shí)時(shí)循環(huán)體
vgSyncFrame();//循環(huán)同步控制
vgFrame();//調(diào)用內(nèi)部函數(shù)
}
應(yīng)用程序前半部分設(shè)置系統(tǒng);循環(huán)體是實(shí)現(xiàn)場(chǎng)景動(dòng)畫瀏覽的程序部分。一般在循環(huán)體前設(shè)置各個(gè)類的參數(shù),根據(jù)需要少量參數(shù)可在循環(huán)體內(nèi)設(shè)置。
以上程序編譯運(yùn)行后就可以對(duì)myapp.adf文件定義的場(chǎng)景進(jìn)行漫游。如果添加了用戶定制代碼,則可以根據(jù)定制代碼控制場(chǎng)景的變化。之所以這么幾條語(yǔ)句就完成了一個(gè)模擬場(chǎng)景漫游的編程,完全是由于Lynx 程序定義的ADF文件完成了大量的程序初始化工作,才使得Vega 編程變得如此簡(jiǎn)單。
如果掌握了Vega 各個(gè)模塊類及其函數(shù)的功能與使用方法,用戶就可以根據(jù)具體任務(wù)的需求在用戶定制代碼區(qū)添加自己的代碼,完成獨(dú)特的虛擬仿真軟件的開發(fā)。
——————————
作者簡(jiǎn)介
劉世彬(1977-),男(漢族),河北邯鄲,沈陽(yáng)炮兵學(xué)院,講師,研究方向:作戰(zhàn)模擬與系統(tǒng)仿真。
劉興彥(1966-)男(漢族),吉林白城,沈陽(yáng)炮兵學(xué)院,副教授,研究方向:自行突擊炮作戰(zhàn)訓(xùn)練仿真模擬。