楊曉龍,崔偉寧
( 裝甲兵工程學(xué)院 信息工程系,北京 100072)
當(dāng)前出現(xiàn)大規(guī)模全局戰(zhàn)爭(zhēng)的可能性已經(jīng)非常渺茫,同時(shí)基于我國(guó)和平崛起的基本路線,發(fā)生局部戰(zhàn)爭(zhēng)的可能性也相對(duì)較小。在和平發(fā)展的時(shí)代大背景下如何保持和提高部隊(duì)?wèi)?zhàn)斗力,隨時(shí)應(yīng)對(duì)突如其來的惡劣情況,成為部隊(duì)?wèi)?zhàn)斗準(zhǔn)備的重要課題。虛擬現(xiàn)實(shí)( virtual reality,VR)是一種新的人機(jī)交互方式,利用計(jì)算機(jī)技術(shù)等多項(xiàng)技術(shù)生成一個(gè)逼真的三維視覺、聽覺、觸覺、嗅覺等虛擬感官世界。而利用虛擬現(xiàn)實(shí)技術(shù)來實(shí)現(xiàn)逼真的虛擬戰(zhàn)場(chǎng)可有效解決以上部隊(duì)需求問題。
戰(zhàn)場(chǎng)地理環(huán)境是指包括戰(zhàn)場(chǎng)位置、形狀等地理體征,戰(zhàn)場(chǎng)中道路、河流、樹木等地貌體征和日照、煙霧等自然現(xiàn)象在內(nèi)的所有可見物理特征的總和。可以想象,在作戰(zhàn)模擬過程中地理特征隨時(shí)間和戰(zhàn)爭(zhēng)情況的變化十分小,可以認(rèn)為他們是不變化的。而戰(zhàn)場(chǎng)環(huán)境的地貌體征可能受到戰(zhàn)斗破壞而導(dǎo)致狀態(tài)變化。因此,在顯示戰(zhàn)場(chǎng)地理環(huán)境時(shí),可根據(jù)物體狀態(tài)是否有變化分為靜態(tài)和可變兩部分,分別針對(duì)他們進(jìn)行構(gòu)建,然后組合起來完成戰(zhàn)場(chǎng)地理環(huán)境的三維視圖,可有效提高實(shí)現(xiàn)效率。
戰(zhàn)場(chǎng)環(huán)境中的光照主要來自太陽(yáng)光,在模擬戰(zhàn)場(chǎng)中設(shè)置一個(gè)點(diǎn)光源作為太陽(yáng),通過調(diào)節(jié)代表太陽(yáng)的點(diǎn)光源的位置和輻射強(qiáng)度,就可以很容易的形成早晨、中午、夜晚的場(chǎng)景。另外大氣現(xiàn)象中存在的霧以及煙塵、污染物等,都會(huì)影響視覺效果,可使用OpenGL 中的霧化技術(shù)來達(dá)到模擬自然現(xiàn)象的效果。
對(duì)戰(zhàn)場(chǎng)中作戰(zhàn)實(shí)體的模擬主要體現(xiàn)在兩個(gè)方面:一是建立實(shí)體的幾何模型;二是讓實(shí)體在場(chǎng)景中運(yùn)動(dòng)起來[1],如飛機(jī)、坦克的幾何結(jié)構(gòu)以及它們飛行、運(yùn)動(dòng)等各種行為。對(duì)于幾何結(jié)構(gòu),可以利用3D 軟件( 如3DS、AutoCAD 等)進(jìn)行繪制,存為三維圖形文件( 如3ds 文件),再利用OpenGL 的相關(guān)函數(shù)處理這些圖形文件,形成作戰(zhàn)模擬場(chǎng)景中的實(shí)體。
實(shí)體的運(yùn)動(dòng)實(shí)際上是指在作戰(zhàn)模擬過程中實(shí)體特性的改變,包括位置與表面的變化。實(shí)體位置變化可通過對(duì)實(shí)體或其某一部分的移動(dòng)、旋轉(zhuǎn)、縮放來實(shí)現(xiàn)。實(shí)體的表面變化主要是由碰撞引起的,需要計(jì)算相互碰撞的兩個(gè)實(shí)體的相對(duì)位置,一般可采用矩形邊界檢測(cè)方法進(jìn)行碰撞計(jì)算,該方法雖然犧牲了一定的精確性,但提高了系統(tǒng)的實(shí)時(shí)性[2]。
特殊視景模型包括雨、雪、爆炸煙火等,這些特殊效果可以通過粒子系統(tǒng)來實(shí)現(xiàn)。
所構(gòu)建的虛擬戰(zhàn)場(chǎng)場(chǎng)景中主要包括:天空體、地形、地物地貌、人造地物、作戰(zhàn)實(shí)體等,而漫游控制及時(shí)態(tài)勢(shì)信息也必不可少。其中較為復(fù)雜的是地形的建模與顯示、漫游控制及碰撞檢測(cè)等技術(shù)。
構(gòu)造可漫游的虛擬戰(zhàn)場(chǎng)場(chǎng)景的一般步驟如下:
1)構(gòu)造地形;
2)構(gòu)造天空體;
3)建立人工地物及地貌特征;
4)為虛擬環(huán)境增加諸如雨、雪、霧等自然現(xiàn)象;
5)漫游控制的實(shí)現(xiàn);
6)實(shí)時(shí)態(tài)勢(shì)信息的標(biāo)注;
7)系統(tǒng)測(cè)試,包括漫游控制的靈活性、信息顯示的準(zhǔn)確性、紋理是否會(huì)扭曲等。
該虛擬戰(zhàn)場(chǎng)場(chǎng)景是在Visual C++環(huán)境下通過調(diào)用Open-GL 函數(shù)庫(kù)編程實(shí)現(xiàn)的。OpenGL 函數(shù)庫(kù)與操作系統(tǒng)無(wú)關(guān),使用OpenGL 函數(shù)庫(kù)以前要對(duì)其進(jìn)行特定的初始化工作,使他與Windows 兼容。OpenGL 有專門的初始化函數(shù)可以利用,他的初始化工作包括:設(shè)置像素格式,建立繪圖描述表,清除緩存,光照初始化。
地形的模擬可以分為兩類:真實(shí)地形與模擬地形。真實(shí)地形和模擬地形的主要區(qū)別是數(shù)據(jù)來源,真實(shí)地形是現(xiàn)實(shí)世界中真實(shí)地形的再現(xiàn),具有非常高的真實(shí)度,必須采用真實(shí)世界中的具體數(shù)據(jù)來構(gòu)造,實(shí)現(xiàn)起來比較困難。如果在可視化過程中對(duì)地形的生成只是視覺上的要求,而非真實(shí)世界的再現(xiàn),則可以采用模擬地形,即可以采用隨機(jī)生成地形高程數(shù)據(jù)的方法或使用高度圖的方法生產(chǎn)地形,這樣操作和實(shí)現(xiàn)起來都較為容易。
不管模擬哪種地形,通常都是采用經(jīng)緯度線構(gòu)成的規(guī)格化網(wǎng)格體逼近的方法,關(guān)鍵在于獲取網(wǎng)格點(diǎn)的有關(guān)參數(shù),即經(jīng)緯度、高程和顏色等數(shù)據(jù)。真實(shí)地形的高程值通常通過航拍圖片或衛(wèi)星圖片獲取,而模擬地形的高程值則如上面所提到的,可采用隨機(jī)生成的方法或讀取高度圖文件得到。如果地形規(guī)模較大,一次性實(shí)現(xiàn)則需要大量的網(wǎng)格體,因而需要的數(shù)據(jù)量大,而可通過采用層次細(xì)節(jié)簡(jiǎn)化LOD( level of details)的方法,以多層簡(jiǎn)單的網(wǎng)格體復(fù)合形成復(fù)雜度高的網(wǎng)格體,來達(dá)到場(chǎng)景實(shí)時(shí)繪制的要求。
本文所構(gòu)造的虛擬戰(zhàn)場(chǎng)場(chǎng)景采用的是模擬地形,而模擬地形又有兩種情況: 一種是比較平坦的地形,可采用平面模擬地形實(shí)現(xiàn),這種辦法實(shí)現(xiàn)起來相對(duì)簡(jiǎn)單,而且對(duì)系統(tǒng)資源的消耗較少。另一種是丘陵山地地形,此時(shí)要采用三維模擬地形實(shí)現(xiàn),使用較多的是二叉樹地形模型[3]或四叉樹地形模型[4],而且根據(jù)視點(diǎn)與地形距離的遠(yuǎn)近使用不同精度的格網(wǎng)繪制地形,在不失真的情況下減少資源消耗和復(fù)雜度,同時(shí)實(shí)現(xiàn)了使用LOD 技術(shù)對(duì)地形繪制的簡(jiǎn)化[5],達(dá)到虛擬戰(zhàn)場(chǎng)場(chǎng)景的實(shí)時(shí)繪制和顯示的真實(shí)效果。圖1 ( a)是平面模擬地形網(wǎng)格,圖1( b)是二叉樹實(shí)現(xiàn)的三維網(wǎng)格地形。
天空體往往能起到增強(qiáng)虛擬場(chǎng)景真實(shí)感的效果,使人有更好的沉浸感。構(gòu)造天空體常用的方法有兩種:一種是立方體盒天空體,它是采用霧化的天藍(lán)色背景,將天空紋理貼在立方體盒上。另一種是半球形網(wǎng)格天空體[6]。半球形的天空體有很多優(yōu)點(diǎn),但是比較復(fù)雜,處理不當(dāng)會(huì)在兩極出現(xiàn)明顯的折皺。立方體盒狀的天空體則相對(duì)簡(jiǎn)單一些,但是當(dāng)離立方體盒邊緣近的時(shí)候天空會(huì)有明顯的變形,解決的方法是采用質(zhì)量較好的全景貼圖,同時(shí)利用OpenGL 的霧化效果,在漫游時(shí)可以達(dá)到亂真的效果。本文采用的就是第一種方法,圖2 是本文在繪制天空體時(shí)使用的5 幅紋理貼圖。
圖2 盒狀天空體的紋理貼圖
在虛擬場(chǎng)景中加入諸如樹木、草地等地物地貌特征,可以大大增強(qiáng)虛擬戰(zhàn)場(chǎng)場(chǎng)景的真實(shí)感。本文在虛擬戰(zhàn)場(chǎng)場(chǎng)景中加入了300 棵樹木。
目前在三維虛擬環(huán)境中構(gòu)造的樹木多采用以下三種形式:分形樹、仿真樹和Bill-board 樹。分型樹的形式占用系統(tǒng)資源較多,因而不宜在實(shí)時(shí)性要求較高的漫游場(chǎng)景中采用。仿真樹通過多邊形進(jìn)行拼裝,形成樹冠及樹干,然后再在相應(yīng)的部分貼上紋理,這種形式實(shí)現(xiàn)比較簡(jiǎn)單,但是真實(shí)感不強(qiáng)。Bill-board 樹則是將一棵樹的圖片作為紋理貼到矩形面片上,然后對(duì)圖片中不是樹結(jié)構(gòu)的部分進(jìn)行透視處理,并且保證紋理始終正對(duì)觀察者,這樣一個(gè)面就可以表現(xiàn)為一棵樹,如圖3 所示是采用這種技術(shù)處理后的樹,就是本文采用的4 種不同的Bill-board 樹。
圖3 本文采用的4 種Bill-board 樹
除了地形、地物地貌以外,在虛擬戰(zhàn)場(chǎng)環(huán)境中還應(yīng)該存在一些其他的三維實(shí)體對(duì)象,如表示各種軍事設(shè)施的實(shí)體以及在較高細(xì)節(jié)層次時(shí)的作戰(zhàn)實(shí)體,如坦克、汽車、推土機(jī)、飛機(jī)等。實(shí)體建模有兩種方法,一種是利用OpenGL 中的繪制API 函數(shù),繪制簡(jiǎn)單的幾何體,然后通過組合來建立模型,圖4 就是虛擬戰(zhàn)場(chǎng)中利用這種方式建立的雷達(dá)實(shí)體。另一種方法是通過專業(yè)的三維建模軟件,如3DS MAX 建立好模型,然后通過OpenGL 函數(shù)加載到虛擬戰(zhàn)場(chǎng)場(chǎng)景中,圖5 就是利用這種方式建立的推土機(jī)模型、直升飛機(jī)模型。
除了在虛擬戰(zhàn)場(chǎng)中增加以上三維實(shí)體模型以增強(qiáng)虛擬戰(zhàn)場(chǎng)真實(shí)感外,在虛擬戰(zhàn)場(chǎng)中加入模擬的士兵人物也是必不可少的一項(xiàng)重要內(nèi)容,利用OpenGL 載入MD2 文件,可以實(shí)現(xiàn)栩栩如生的戰(zhàn)斗人員,增強(qiáng)了虛擬戰(zhàn)場(chǎng)的沉浸感。圖6 是虛擬戰(zhàn)場(chǎng)中的士兵人物。
圖6 戰(zhàn)場(chǎng)中的虛擬士兵
虛擬戰(zhàn)場(chǎng)場(chǎng)景中分布地域很廣,并有很多戰(zhàn)斗實(shí)體和地物地貌,視點(diǎn)就象攝像機(jī)的鏡頭,他的位置、方向和角度以及變焦鏡頭的變化,都將影響觀察者所看到的虛擬戰(zhàn)場(chǎng)的場(chǎng)景。視點(diǎn)變換的模式有很多種,如絕對(duì)模式、跟蹤模式、級(jí)聯(lián)模式、羅盤模式等[7-8]。
在絕對(duì)模式下,視點(diǎn)的位置和旋轉(zhuǎn)均由手工操作改變或程序預(yù)先設(shè)定;跟蹤模式中視點(diǎn)旋轉(zhuǎn)角度由被附著的實(shí)體決定,而位置可以進(jìn)行人為的調(diào)整; 級(jí)聯(lián)模式中視點(diǎn)位置由被附著的實(shí)體決定,當(dāng)確定了視點(diǎn)相對(duì)實(shí)體的位置后,視點(diǎn)就隨著實(shí)體運(yùn)動(dòng)[9];羅盤模式中視點(diǎn)的位置和指向都由被附著的實(shí)體決定,視點(diǎn)隨著實(shí)體的運(yùn)動(dòng)而運(yùn)動(dòng),二者的相對(duì)距離可以事先確定。由此看以看出,這4 種視點(diǎn)變換模式的主要區(qū)別在于視點(diǎn)的位置和旋轉(zhuǎn)是由誰(shuí)控制的問題,絕對(duì)模式下完全由操作人員決定,而羅盤模式下完全由實(shí)體決定,其他兩種由操作人員和附著實(shí)體共同決定。
關(guān)于場(chǎng)景的漫游,OpenGL 函數(shù)庫(kù)中有一個(gè)專門的函數(shù),本文利用了這個(gè)函數(shù)gluLookAt( eyex,eyey,eyez,centerx,centery,centerz,upx,upy,upz)來實(shí)現(xiàn)漫游功能。
碰撞檢測(cè)問題是基于這樣一個(gè)事實(shí):兩個(gè)不可穿透的對(duì)象不能共享相同的空間區(qū)域,其目的是發(fā)現(xiàn)碰撞并報(bào)告,即檢查兩個(gè)物體是否發(fā)生干涉[10]。
碰撞檢測(cè)算法大致可分為兩類:空間分割法和層次包圍盒方法。這兩種方法的目的都是為了盡可能減少需要進(jìn)行相交測(cè)試的對(duì)象對(duì)或基本幾何元素對(duì)的數(shù)目[11]。空間分割法的基本原理是將整個(gè)虛擬空間劃分成等體積的小的單元格,然后只對(duì)占據(jù)了同一單元格或相鄰單元格的幾何對(duì)象進(jìn)行相交測(cè)試,這樣大大減少了需要相交測(cè)試的對(duì)象數(shù)目。空間分割法比較適用于類似物體在障礙物之間飛行這樣的虛擬場(chǎng)合。
層次包圍盒方法的基本思想是用體積稍大且特性簡(jiǎn)單的幾何體( 稱為包圍盒)來近似地代替復(fù)雜的幾何對(duì)象,并通過構(gòu)造樹狀層次結(jié)構(gòu)逐漸逼近對(duì)象的幾何特性。進(jìn)行重疊測(cè)試時(shí)只需對(duì)包圍盒重疊的部分進(jìn)行進(jìn)一步的相交測(cè)試,從而可以大大減少參與相交測(cè)試的包圍盒的數(shù)目,提高碰撞檢測(cè)的效率。到目前為止,用于碰撞檢測(cè)的包圍盒主要有包圍球、坐標(biāo)軸的軸向包圍盒( AABB)、帶方向包圍盒( OBB)、散方向多面體k-DOP、固定方向凸包FDH 等。
在實(shí)際應(yīng)用中我們可以結(jié)合空間分割法和層次包圍盒方法同時(shí)使用,對(duì)于大的空間或區(qū)間首先用空間分割法進(jìn)行劃分,排除不可能相交的測(cè)試對(duì),對(duì)于在同一單元格內(nèi)或相鄰的幾何對(duì)象進(jìn)行測(cè)試時(shí)使用再使用層次包圍盒方法,進(jìn)一步減少測(cè)試對(duì),從而提高膨脹檢測(cè)的效率,尤其在實(shí)時(shí)性要求比較高的虛擬戰(zhàn)場(chǎng)環(huán)境中,這種途徑的優(yōu)點(diǎn)更加突出。
在本文中碰撞檢測(cè)主要針對(duì)兩種碰撞情況。一是主觀點(diǎn)( 漫游者)與樹木、3D 模型實(shí)體的碰撞繞行;二是子彈在飛行過程中擊中目標(biāo)產(chǎn)生的爆炸的過程。
碰撞繞行算法:zhangai( )的入口參數(shù)是上一步視點(diǎn)的位置,進(jìn)入zhangai( )后,用當(dāng)前視點(diǎn)位置( X,Y)和所有對(duì)象的位置( X,Y)進(jìn)行比較,即障礙檢測(cè)。如果兩者的位置差小于給定值就認(rèn)為有碰撞發(fā)生,有碰撞時(shí)再分別看是在哪個(gè)分量上發(fā)生的碰撞,對(duì)發(fā)生碰撞的分量取上一步的值。這樣就實(shí)現(xiàn)了碰撞的繞行。
子彈擊中目標(biāo)的算法很很多種,最簡(jiǎn)單的是直接以瞄準(zhǔn)點(diǎn)為爆炸點(diǎn),這種算法以屏幕定位為基準(zhǔn),無(wú)需碰撞檢測(cè),但是這樣只能實(shí)現(xiàn)爆炸效果,不能模擬虛擬戰(zhàn)場(chǎng)中戰(zhàn)斗的真實(shí)效果,如擊中目標(biāo)后出現(xiàn)的狀態(tài)變化,因此,此方法有一定的局限性。本文是基于運(yùn)動(dòng)物體碰撞檢測(cè)的原理,子彈發(fā)射后,在飛行過程中隨時(shí)檢測(cè)是否與其他物體發(fā)生碰撞。當(dāng)檢測(cè)到子彈與其他任何物體發(fā)生碰撞時(shí),子彈就會(huì)爆炸,這樣更加真實(shí),同時(shí)檢測(cè)到與子彈發(fā)生碰撞的實(shí)體發(fā)生狀態(tài)的變化,如士兵被子彈擊中后應(yīng)由活躍狀態(tài)變?yōu)樗劳鰻顟B(tài),即有自由活動(dòng)的實(shí)體變?yōu)楣潭顟B(tài)的實(shí)體。子彈碰撞檢測(cè)函數(shù)Hitexamina( float x,float y,float z),射擊函數(shù)fire( )調(diào)用此函數(shù),判斷是否命中目標(biāo)以決定子彈的爆炸。
虛擬現(xiàn)實(shí)技術(shù)是綜合性極強(qiáng)的高新技術(shù),被認(rèn)為是仿真技術(shù)最熱門的發(fā)展方向。利用虛擬現(xiàn)實(shí)技術(shù)建立虛擬戰(zhàn)場(chǎng)仿真系統(tǒng)是部隊(duì)未來訓(xùn)練、演習(xí)等的重要研究課題,它將軍官戰(zhàn)術(shù)訓(xùn)練拓展到模擬實(shí)戰(zhàn)新的訓(xùn)練領(lǐng)域,較好地解決常規(guī)訓(xùn)練方法中存在的問題,能充分調(diào)動(dòng)各級(jí)軍官戰(zhàn)術(shù)訓(xùn)練的積極性和深入研究戰(zhàn)術(shù)思想的主動(dòng)性。本文的研究對(duì)于部隊(duì)深入開展未來虛擬作戰(zhàn)仿真系統(tǒng)有一定借鑒意義。
[1]徐明亮,盧紅星,王琬.OpenGL 游戲編程[M].北京:機(jī)械工業(yè)出版社,2008.
[2]Robert Short,Pamela Kiley,Rodney Ritter.2D Polygon Detection[R].Simulation Interoperability Workshop,2009.
[3]林繼承,萬(wàn)旺根,周俊瑋.等.基于三角形二叉樹的實(shí)時(shí)大規(guī)模地形渲染算法[J].計(jì)算機(jī)工程,2009,35(2):268-270.
[4]李穎,陳業(yè)斌.基于四叉樹的三維地形繪制算法[J].安徽工業(yè)大學(xué)學(xué)報(bào):自然科學(xué)版,2008,25(1):80-82.
[5]彭海.三維地形可視化技術(shù)的研究與實(shí)現(xiàn)[D].武漢: 武漢理工大學(xué),2010.
[6]David W.Seidel.Generating Terrain Based on Bitmap File[R].Simulation Interoperability Workshop,2010.
[7]M Pauline Baker,Robert J. Stein. BATTLEVIEW: TOURING A VIRTUAL BATTLEFIELD[D]. Illinois: University of Illinois,2009.
[8]馬峰.基于OpenGL 的虛擬戰(zhàn)場(chǎng)環(huán)境構(gòu)建[D].大連:大連理工大學(xué),2006.
[9]Judith Dahmann,Marnie Salisbury,Lashon Booker,et al.An Extension of DIS Virtual Simulation[R]. Standardsfortheinteroperation of Defense Simulations:22102,2004.
[10]邊美玲,任建平.包圍盒碰撞檢測(cè)技術(shù)的研究[J].機(jī)械管理開發(fā),2008,24(2):27-31.
[11]劉曉東,姚蘭,邵付東,等.一種基于混合層次包圍盒的快速碰撞檢測(cè)算法[J]. 西安交通大學(xué)學(xué)報(bào),2007,41(2):141-145.