国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于OpenGL的虛擬海場景生成技術(shù)研究*

2015-03-14 08:08張愛華吳彥卓
艦船電子工程 2015年5期
關(guān)鍵詞:艦船海浪海面

張愛華 吳彥卓

(92941部隊 葫蘆島 125001)

?

基于OpenGL的虛擬海場景生成技術(shù)研究*

張愛華 吳彥卓

(92941部隊 葫蘆島 125001)

論文以Visual C++為開發(fā)平臺,利用OpenGL構(gòu)建海洋場景,通過調(diào)用建立的艦船3D模型、紋理映射、場景的合成、雙緩存等技術(shù),實現(xiàn)反艦導(dǎo)彈可見光目標(biāo)圖像的生成,為靶場導(dǎo)引頭對海性能測試提供了一個很好的輔助手段,有助于提高靶場試驗鑒定技術(shù)水平。

OpenGL; 圖像生成; 可見光目標(biāo)特性; 仿真

Class Number TP391

1 引言

現(xiàn)代戰(zhàn)爭形態(tài)已發(fā)展為海、陸、空、天、電五維空間對抗的高技術(shù)戰(zhàn)爭,其中“電”對抗(即電磁對抗)越來越激烈。目前單一末制導(dǎo)雷達體制的戰(zhàn)術(shù)導(dǎo)彈已不能滿足在現(xiàn)代戰(zhàn)場環(huán)境下高精度、高效能的目標(biāo)打擊需求,從而使下一代制導(dǎo)武器的工作頻段不得不轉(zhuǎn)入抗干擾能力更強的毫米級頻段和抗電磁干擾能力優(yōu)越的非電磁波波段,后者包括可見光、紅外、紫外和激光等光譜頻段。其中導(dǎo)引頭的可見光目標(biāo)特性是武器裝備領(lǐng)域的一項重要研究內(nèi)容,目前可見光目標(biāo)成像仿真主要采用半實物仿真,不管是景象投影方式還是信號輸入方式,仿真的關(guān)鍵是可見光圖像生成[1]。因此,靶場在以武器裝備性能評測為目的的武器裝備仿真領(lǐng)域和模擬訓(xùn)練仿真領(lǐng)域,要模擬不同環(huán)境及復(fù)雜背景條件下的真實目標(biāo)特性以滿足不同型號反艦導(dǎo)彈的要求可以大大提高技術(shù)陣地測試可信度和高試驗成功率[2],并逐步完善靶場技術(shù)保障能力,用以彌補可見光導(dǎo)引頭對海試驗數(shù)據(jù)不充分的不足。

文中基于OpenGL圖形庫,用理論分析和計算機技術(shù)對海場景圖像進行模擬,首先創(chuàng)建天空、海面,同時建立艦船目標(biāo)的實體模型,通過三維場景的創(chuàng)建、合成、紋理映射、雙緩存等技術(shù),實現(xiàn)反艦導(dǎo)彈導(dǎo)引頭對海性能試驗時目標(biāo)/背景圖像的模擬。

2 OpenGL開發(fā)庫

開放式圖形庫(Open Graphic Library,OpenGL)是美國SGI公司推出的開放式三維圖形軟件接口工業(yè)標(biāo)準(zhǔn),是一種可獨立于操作系統(tǒng)和硬件環(huán)境的三維圖形庫[3]。OpenGL提供了二維和三維建模、變換、光線處理、色彩處理、紋理映射、運動模糊、動畫和實時交互等功能,是繪制真實感三維圖形、建立三維交互場景、實現(xiàn)虛擬現(xiàn)實的高性能圖形開發(fā)接口。使用OpenGL繪制三維場景具有圖形質(zhì)量高、程序可移植性好等優(yōu)點。

每一種程序都有它的運行環(huán)境。OpenGL的所有繪圖命令(函數(shù))都必須在OpenGL的運行環(huán)境中使用,這個運行環(huán)境稱為OpenGL的框架[4]。由于本文的程序是在Windows系統(tǒng)上實現(xiàn)和運行的,所以O(shè)penGL程序必須建立在windows的程序框架上。在Microsoft Visual C++6.0中已經(jīng)包含OpenGL庫,也可以將glut32.dll動態(tài)鏈接庫、glut.h頭文件拷貝、glut32.1ib靜態(tài)庫安裝到系統(tǒng)的相關(guān)目錄。

在啟動Microsoft Visual C++6.0后,手動添加OpenGL的相關(guān)鏈接,即在工程設(shè)置菜單下VCProject文本庫框架內(nèi)添加OpenGL庫:opengl32.1ib、glu32.1ib、glut32.1ib、glaux.1ib,如圖1所示。在建立好OpenGL應(yīng)用程序的框架后,所有的圖形繪制都在OnDraw( )函數(shù)中來實現(xiàn)。

圖1 向工程中添加OpenGL鏈接庫

3 虛擬海場景的生成

本文就反艦導(dǎo)彈的目標(biāo)/背景進行分析,模擬系統(tǒng)中的虛擬海洋場景比較復(fù)雜,主要包括海面、艦只、天空等。

3.1 海面的繪制

海浪是一個十分復(fù)雜的自然現(xiàn)象,無論在時間上還是空間上都具有不規(guī)則性,對其進行數(shù)值模擬是一個比較復(fù)雜的過程。而海面的模擬主要是對海浪的運動進行模擬。在虛擬海洋場景中,對海浪生成的實時性有較高的要求,對海面的模擬只需要滿足視覺真實感,不必精確表現(xiàn)海浪的科學(xué)可視化[5]。

而海面的模擬可以利用海浪譜的線性疊加法建立海浪的數(shù)學(xué)模型,將海浪視為由多個不同振幅、不同周期和不同隨機相位的余弦波疊加而成。該方法雖然效果逼真,但是計算也較復(fù)雜,不利于仿真畫面的實時生成。由于海場景模擬并不要求模擬海洋環(huán)境的物理特性,而只是將其作為背景,因此,將海面的運動簡化成一個沿海浪高度方向的簡諧振蕩運動,具體作法是以一個正方形作為海面的框架,然后沿X、Y方向按一定的寬度將海面分成等間距的網(wǎng)格[6],如圖2所示。

圖2 海浪運動模擬

海浪的運動可利用cos函數(shù)生成來增加起伏感,通過調(diào)整cos函數(shù)的波幅、相位和頻率來分別控制海浪的高度和海面的波動頻率。對于一個隨機的海浪,海浪模型可以描述為

(1)

其中:y(x,t)表示t時刻的波高;x表示橫坐標(biāo);an是第n海浪的幅度;k是波數(shù);c是波速。

如果給定海浪的傳播方向θ,則式(1)可以轉(zhuǎn)化為

(2)

其中:x、z分別表示水平面上的橫坐標(biāo)和縱坐標(biāo),ω=kc,ω是頻率,c是波速。

為了要得到更為逼真的海面,可以增加模型的階數(shù)和數(shù)量。并利用上述海浪模型確定浪高,通過調(diào)整波浪的振幅、頻率和波速控制海浪的運動[7]。之后利用OpenGL中提供的紋理操作函數(shù),設(shè)置海面的材質(zhì)、光照、顏色,然后選用一幅合適的位圖對海面進行紋理映射,就可以形成海浪的動態(tài)模擬。運用紋理映射即可方便地制作真實感的海面而不需花費更多的時間去考慮海面的表面紋理,從而使三維場景中的物體更加生動、自然[8]。

3.2 天空場景的繪制

一個逼真的海洋場景不能只有海面,還要有藍天、白云、陽光等,這就需要用到OpenGL中的光照、材質(zhì)和紋理等函數(shù)來對海洋場景進行后處理。真實感的天空場景繪制主要有盒子法和球形法,在本文中采用天空盒的方法,就是用一矩形方盒作為天空遠景貼圖的載體[9]。由于帶有云層的天空更加形象和逼真,在盒子法中云層的生成都是通過紋理貼圖技術(shù)來實現(xiàn)的,具體流程如圖3所示[10]。

圖3 天空場景的繪制流程

構(gòu)成天空盒的載體可看做一長方體,在該長方體除了底面的五個面貼有五幅天空遠景的圖形。這五幅圖形必須滿足以下條件: 1) 圖形為BMP位圖格式,長度和寬度(象素點)為2的整數(shù)次冪。 2) 頂圖的四邊與前后左右圖的上邊相連。 3) 前后左右四幅圖形必須首尾相連。

glBindTexture(GL_TEXTURE_2D,texturel); //前圖形

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);

glTexParameteri(GL_TEXTURE_ 2D,GL_TEXTURE_WRAP_T,GL_CLAMP);glBegin (GL_QUADS);

glTexCoord2f(1.0f,0.0f);glVertex3f(x+width,y,z);

glTexCoord2f(1.0f,1.0f);glVertex3f(x+width,y+height,z);

glTexCoord2f(0.0f,1.0f);glVertex3f(x,y+height,z);

glTexCoord2f(0.0f,0.0f);glVertex3f(x,y,z);

glEnd(); // 繪制結(jié)束

glBindTexture(GL_TEXTURE_ 2D,texture2); //左圖形

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_CLAMP);glBegin (GL_QUADS);

glTexCoord2f(1.0f,0.0f);glVertex3f(X, Y,z+length);

glTexCoord2f(1.0f,1.0f);glVertex3f(X,y+height,z+length);

glTexCoord2f(0.0f,1.0f);glVertex3f(X+width,y+height,z+length);

glTexCoord2f(0.0f,0.0f);glVertex3f(x+width,y,z+length);

glEnd(); //繪制結(jié)束

3.3 艦船的實體建模

為了在場景中顯示高逼真度的海洋場景圖像,關(guān)鍵就是建立高質(zhì)量的三維艦船實體模型。OpenGL提供了一系列的函數(shù)用于繪制點、線、多邊形、曲線、曲面等基本圖元,然后利用基本圖元按照一定的空間位置形成復(fù)雜的幾何物體。由于OpenGL提供的幾何繪制函數(shù)只能繪制一些規(guī)則簡單的幾何體,要想構(gòu)造如艦船這種復(fù)雜的場景模型,單靠這些繪制函數(shù)是不夠的。因此需要開發(fā)OpenGL與其它專業(yè)建模軟件之間的圖形接口,常見的有OpenGL與AutoCAD、3D MAX、Maya之間的圖形接口,目的就是為了將其它軟件建好的模型導(dǎo)入到OpenGL中[3,11]。結(jié)合本文的設(shè)計要求和軟件的實際應(yīng)用領(lǐng)域,本文選擇應(yīng)用最廣泛的3D MAX作為建模工具,而后通過開發(fā)的圖形接口把建好的模型導(dǎo)入到OpenGL中。

3D MAX等三維建模軟件可以大大減輕目標(biāo)三維幾何建模的工作量。由于艦船構(gòu)型極為繁雜,包含有大量不同層次的復(fù)雜結(jié)構(gòu),其中包括了大量的武器和上層建筑。因此要對如此復(fù)雜的物體進行建模,建立一個整體的模型顯然比較困難,而且不利于模型的修改。事實上,精確地按照艦船實際結(jié)構(gòu)建模是費時且不必要,因為在實際應(yīng)用中所需的可見光圖像中這些精細的結(jié)構(gòu)圖像大多是無需辨認(rèn)的、對艦船可見光目標(biāo)特性也無顯著貢獻。所以,需要在保證系統(tǒng)要求逼真度情況下減少建模的復(fù)雜程度,進行一定的簡化,并對目標(biāo)進行三維網(wǎng)格劃分,考慮到一般情況下艦船為薄殼結(jié)構(gòu),文中采用面元劃分。

而艦船目標(biāo)模擬,可以采用經(jīng)驗?zāi)P团c實際模型相結(jié)合的辦法,根據(jù)艦船目標(biāo)材料、結(jié)構(gòu)、性質(zhì)進行預(yù)測,并根據(jù)實際測量中得到艦船的可見光目標(biāo)特性進行修正。從而可以得到艦船目標(biāo)的可見光特性分布。

從建模方式看,3D MAX提供了三種典型的建模方式:多邊形建模、面片建模、Nurbs建模[11]。在建模時使用常用的網(wǎng)格建模為主,船體建模是根據(jù)一艘艦船的實際數(shù)據(jù),采用多邊形建模(mesh),結(jié)合布爾運算等方法來構(gòu)建實體模型。為了使模型和真實物體較為相似,還要為模型賦予合適的材質(zhì),并模擬自然光來照亮模型。3D MAX構(gòu)建的艦船的實體建模如圖4所示。

圖4 3D MAX下艦船的實體建模

3.4 場景合成

要在OpenGL場景中顯示3D模型,首先要在已建好的OpenGL海場景中調(diào)用艦船這個復(fù)雜模型。我們首先考慮用編寫程序接口的方式導(dǎo)入3DS格式的艦船模型[12],現(xiàn)在有了3DS格式的艦船模型數(shù)據(jù),接著可以通過Visual C++程序調(diào)用OpenGL設(shè)計的程序模塊,將3D MAX下建立的艦船模型放置在按照時間節(jié)點計算出的本幀圖像應(yīng)對應(yīng)的距離上,按照與圖形工作站相同的方式完成對三維場景的合成。OpenGL包含幾百個用于三維圖形操作的函數(shù),可以對繪制好的三維模型在場景中進行變換、光照處理、色彩處理、融合、霧化、紋理映射、渲染等操作,利用OpenGL可以創(chuàng)作出具有照片質(zhì)量的三維彩色圖形和動畫。

為了讓場景中的物體依照其運動規(guī)律和灰度變化規(guī)律動起來,采用雙緩存技術(shù)。所謂雙緩存就是在這個顯示的緩沖區(qū)之外再建立一個不顯示的緩沖區(qū),所有的繪圖都將在這個不顯示的緩沖區(qū)中進行,只有當(dāng)一幀都繪制完了之后才會不可見的。雙緩存技術(shù)是OpenGL實現(xiàn)動畫的關(guān)鍵技術(shù),其原理類似于電影放映,雙緩存技術(shù)也稱為實時動畫法[4,13]。程序把為計算機屏幕上所有的像素保存數(shù)據(jù)的內(nèi)存區(qū)看成是兩個視頻存儲器,在任意時刻,只能顯示其中一個存儲器的內(nèi)容。當(dāng)前可見的視頻存儲器稱為前臺視頻存儲器,不可見的正在調(diào)取的視頻存儲器就稱為后臺視頻存儲器。在顯示前臺視頻存儲器中的一幀畫面時程序在后臺視頻存儲器中調(diào)取下一幀畫面,當(dāng)顯示完畢后,交換存儲器,后臺視頻存儲器內(nèi)容顯示在屏幕上,而前臺存儲器又在調(diào)取下一幀畫面,如此循環(huán)反復(fù),屏幕上始終顯示的是已經(jīng)生成好的動畫幀,由于沒有顯示屏幕刷新過程,消除了畫面閃爍現(xiàn)象,從而獲得連續(xù)平滑的動畫效果。要實現(xiàn)這一功能,先要將設(shè)備場景定義的當(dāng)前像素格式設(shè)為雙緩存模式PFD_DOUBLEBUFFER,然后在繪制函數(shù)RenderScene()的末尾調(diào)用函數(shù)glSwapBuffers,這樣就實現(xiàn)了雙緩存動畫。

4 虛擬海場景仿真實例

根據(jù)以上方法就可以生成滿足要求的虛擬海場景,其中一幅合成后的三維海場景效果圖如圖5所示。

圖5 合成的三維海場景效果圖

為了實現(xiàn)人機交互,通過Visual C++6.0編程,來設(shè)置不同參數(shù),對各種條件下可見光導(dǎo)引頭性能進行仿真試驗。當(dāng)開始根據(jù)要求生成所需目標(biāo)時,可以通過程序界面上的參數(shù)選擇完成目標(biāo)設(shè)定,實現(xiàn)捕獲概率、方位跟蹤精度等多項模擬項目的功能測試。其中,在做方位跟蹤精度測試時,點選主界面導(dǎo)彈速度、目標(biāo)距離等參數(shù)選項,在目標(biāo)成像視場中心顯示生成的模擬目標(biāo),導(dǎo)引頭正常捕獲目標(biāo)并轉(zhuǎn)入跟蹤,控制模擬目標(biāo)改變運動狀態(tài),導(dǎo)引頭在多個位置測得跟蹤誤差。飛行狀態(tài)為靜態(tài)時模擬靜止目標(biāo);為動態(tài)時模擬綜合測試時導(dǎo)彈的飛行彈道曲線,由遠到近,隨著導(dǎo)彈與目標(biāo)間的距離縮短,目標(biāo)輻射能量幅度逐漸增強,目標(biāo)模擬成像像體逐漸放大,從而實現(xiàn)虛擬海背景下目標(biāo)的模擬。圖6從(a)至(d)依次為導(dǎo)彈由遠及近跟蹤艦船目標(biāo)的變化實現(xiàn)情況。

圖6 導(dǎo)彈由遠及近跟蹤艦船目標(biāo)的變化情況

5 結(jié)語

可見光目標(biāo)特性是武器裝備領(lǐng)域的一項重要研究內(nèi)容,可見光成像制導(dǎo)技術(shù)的發(fā)展促進了可見光成像仿真技術(shù)的研究。本文以Visual C++為開發(fā)平臺,利用OpenGL建立海洋環(huán)境三維場景,通過在OpenGL下調(diào)用3D MAX建立的艦船模型,采用紋理映射、場景的合成渲染、雙緩存等技術(shù),初步實現(xiàn)了可見光導(dǎo)引頭目標(biāo)圖像的生成,下一步的目標(biāo)是使整個系統(tǒng)的仿真程度和目標(biāo)/背景更加復(fù)雜、逼真。

虛擬海洋場景的復(fù)雜度可以加入雨雪霧等因素;實體模型的構(gòu)建上應(yīng)針對不同的艦船目標(biāo)模型建模、加載;艦船目標(biāo)在導(dǎo)引頭視場中的位置和姿態(tài);艦船的海上航行、規(guī)避等戰(zhàn)術(shù)動作也需考慮。這樣就大大提高了系統(tǒng)仿真的逼真度和目標(biāo)信息庫的可信度,有利于靶場進行反艦導(dǎo)彈可見光導(dǎo)引頭的識別與跟蹤能力的性能驗證。

[1] 虞紅,雷杰.可見光成像制導(dǎo)半實物仿真中的圖像生成技術(shù)[J].現(xiàn)代防御技術(shù),2006,34(6):107-113.

[2] 向哲,李善高,等.反艦導(dǎo)彈靶場試驗視景仿真技術(shù)[J].海軍航空工程學(xué)院學(xué)報,2010,25(2):235

[3] [美]Shreiner.D,等.OpenGL編程指南[M].北京:機械工業(yè)出版社,2008:228-278.

[4] 郭兆榮,李蓄,王彥.Visual C++OpenGL應(yīng)用程序開發(fā)[M].北京:人民郵電出版社,2006.

[5] 李一華.基于OpenGL的虛擬場景生成技術(shù)[J].艦船電子工程,2010(4):137.

[6] 王相海,李婷婷.基于幾何建模的海浪模擬[J].計算機科學(xué),2011,38(10):259-261.

[7] 揚懷平,孫家廣.基于海浪譜的波浪模擬[J].系統(tǒng)仿真學(xué)報,2002,14(9):1175-1178.

[8] Lindstrom P, Koller D, Ribarsky W,etal. Real-time, continuous level of detail rendering of height fields[C]//Computer Graphics Proceedings, Annual Conference Series, ACM SIGGRAPH, New Orleans, Louisiana,1996:109-118.

[9] 尹寶瑞.基于OpenGL虛擬海洋環(huán)境仿真[D].哈爾濱:哈爾濱工程大學(xué)碩士學(xué)位論文,2010:47-62.

[10] 劉琪.基于OpenGL的三維景觀動態(tài)仿真[J].武漢工程大學(xué)學(xué)報,2011,33(7):32-37.

[11] 王清輝,李靜榮.CAD應(yīng)用程序開發(fā)詳解-Visual C++與OpenGL綜合應(yīng)用[M].北京:電子工業(yè)出版社,2012:97-155.

[12] 焦淑紅,朱婧,王利國.基于3D MAX的船舶運動仿真[J].應(yīng)用科技,2006,33(3):35-37.

[13] 任群.VC++與OpenGL混合編程實現(xiàn)三維圖形處理[J].大眾科技,2010(1):38-40.

The Virtual Sea Terrain Generation Technique Based on OpenGL

ZHANG Aihua WU Yanzhuo

(No. 92941 Troops of PLA, Huludao 125001)

Taking VC++ as developing platform, OpenGL is used to establish the ocean scene. The visual image generation of anti-ship is realized, through the technologies of invoking the 3D ship model that has been built, texture mapping, compounding scene, and doublebuffer etc, thus providing a good accessory means of the function test for aim at sea to the missile seeker and contributing to improving the test and identification level of the range.

OpenGL, image generation, target characteristics of visible light, simulation

2014年11月8日,

2014年12月23日

張愛華,女,碩士,工程師,研究方向:戰(zhàn)術(shù)導(dǎo)彈武器系統(tǒng)試驗。吳彥卓,男,助理工程師,研究方向:戰(zhàn)術(shù)導(dǎo)彈武器系統(tǒng)試驗。

TP391

10.3969/j.issn1672-9730.2015.05.024

猜你喜歡
艦船海浪海面
艦船通信中的噪聲消除研究
丫丫和小海浪
海浪
海面床,輕輕搖
艦船測風(fēng)傳感器安裝位置數(shù)值仿真
樊應(yīng)舉
第六章 邂逅“胖胖號”
暗礁
艦船腐蝕預(yù)防與控制系統(tǒng)工程
臺日艦船對峙內(nèi)幕曝光