文/王潔 王凱弘 李興東 范學(xué)滿
潛望鏡是一種高精度的大型軍用光學(xué)儀器,是潛艇必須配置的重要裝備之一。戰(zhàn)時(shí)潛望鏡測(cè)天導(dǎo)航是一種自主定位手段,加強(qiáng)潛望鏡的測(cè)天訓(xùn)練顯得尤為重要。但實(shí)際訓(xùn)練中,往往受到天氣的影響,很難達(dá)到預(yù)期的訓(xùn)練效果。另外用實(shí)裝進(jìn)行訓(xùn)練,設(shè)備磨損嚴(yán)重,損耗較大。在模擬訓(xùn)練中,操作者脫離了真實(shí)的環(huán)境,這樣就有必要提供能表示真實(shí)環(huán)境的視景仿真系統(tǒng),其中環(huán)境效果生成及潛望鏡的測(cè)天功能模擬實(shí)現(xiàn)占有比較重要的地位。本文通過(guò)潛望鏡視景實(shí)用化研究,解決潛望鏡視景模擬中的幾個(gè)主要問(wèn)題,為受訓(xùn)人員提供真實(shí)感強(qiáng)的操作環(huán)境。
目前,基于底層的三維圖形庫(kù)OpenGL,出現(xiàn)了許多高層的三維視景開(kāi)發(fā)環(huán)境。當(dāng)前支持實(shí)時(shí)三維視景處理的軟件包括IRIS Performer,MultiGen-Paradigm Vega,CG2 Vtree,Lockheed Martin SE/View Quantum3D OpenGVS等。我們選用了功能比較強(qiáng)大的OpenGVS。
OpenGVS是Quantum3D公司的產(chǎn)品,用于3D場(chǎng)景圖形視景仿真實(shí)時(shí)開(kāi)發(fā)。它具有很多優(yōu)點(diǎn):易用性和重用性好,巨大的編程靈活性和良好的可移植特性。OpenGVS提供各種軟件資源,利用資源自身提供的API(Application Programming Interface,應(yīng)用程序接口)可以很好地以接近自然和面向?qū)ο蟮姆绞浇M織視景諸元和進(jìn)行編程,來(lái)模擬視景的各個(gè)要素。圖1所示為OpenGVS的軟件資源及其相互關(guān)系。
OpenGVS既為用戶提供高層的場(chǎng)景管理API,同時(shí)又提供了對(duì)點(diǎn)、線、面等基本圖元的支持。開(kāi)發(fā)人員可用系統(tǒng)提供的對(duì)象引入工具,引入在其他標(biāo)準(zhǔn)建模工具中已經(jīng)建好的三維幾何模型。用系統(tǒng)提供的場(chǎng)景工具、光源工具、霧工具、相機(jī)工具、通道工具、幀緩存工具等創(chuàng)建場(chǎng)景,控制場(chǎng)景中物標(biāo)的運(yùn)動(dòng)。其中,相機(jī)工具是我們經(jīng)常用到的一種重要工具。它主要用來(lái)控制動(dòng)態(tài)場(chǎng)景的顯示,一般來(lái)說(shuō),簡(jiǎn)單的相機(jī)只包含單一的相機(jī)平臺(tái)。但對(duì)于某些復(fù)雜視景的需要,例如俯視、仰視,或相對(duì)于一個(gè)特定點(diǎn)偏移與定位相機(jī),就需要為其相繼創(chuàng)建額外的分層控制平臺(tái)。
依據(jù)OpenGVS的軟件層次(如圖2所示),在開(kāi)發(fā)潛望鏡視景驅(qū)動(dòng)程序時(shí),將已經(jīng)建好的模型通過(guò)OpenGVS提供的對(duì)象引入工具(Import Facility),引入到系統(tǒng)中進(jìn)行顯示。視景的動(dòng)態(tài)控制則是根據(jù)具體功能實(shí)現(xiàn)的要求,通過(guò)設(shè)置通道、相機(jī)等工具來(lái)實(shí)現(xiàn)。另外,也可用OpenGVS提供的底層函數(shù)實(shí)現(xiàn)其算法,以滿足特殊應(yīng)用的需要。

圖1:OpenGVS軟件資源及相互關(guān)系圖

圖2:OpenGVS軟件層次圖
所謂潛望鏡測(cè)天導(dǎo)航是指潛艇處于潛望深度航行時(shí),使用潛望鏡導(dǎo)航裝置進(jìn)行測(cè)天定位,確定潛艇的地理位置。在經(jīng)過(guò)改裝的模擬潛望鏡中,功能的實(shí)現(xiàn)由驅(qū)動(dòng)軟件控制,星空視景變化的控制需符合運(yùn)用實(shí)裝測(cè)天的一般規(guī)律,這里重點(diǎn)介紹與測(cè)天有關(guān)功能的實(shí)現(xiàn)方法。
實(shí)現(xiàn)潛望鏡的俯仰觀測(cè)功能,即俯仰角度范圍從-10度到+70度,是調(diào)用了OpenGVS相機(jī)工具的另一個(gè)函數(shù)GV_cam_set_rotation_x()來(lái)實(shí)現(xiàn)系統(tǒng)相機(jī)繞X軸的轉(zhuǎn)動(dòng)。當(dāng)操作者轉(zhuǎn)動(dòng)俯仰瞄準(zhǔn)定位機(jī)構(gòu)的俯仰定位手柄時(shí),通過(guò)數(shù)模轉(zhuǎn)換裝置將轉(zhuǎn)動(dòng)的模擬量轉(zhuǎn)換為數(shù)字量,潛望鏡通道計(jì)算機(jī)實(shí)時(shí)地將該數(shù)字量作為函數(shù)GV_cam_set_rotation_x()的旋轉(zhuǎn)角度參數(shù)輸入,以匹配相應(yīng)角度的視景。

表1:天體方位每分鐘變化量

圖3:OpenGVS坐標(biāo)系
潛望鏡光學(xué)系統(tǒng)中設(shè)置了濾光鏡,用于在各種情況下提高觀察效果。為了在系統(tǒng)中模擬實(shí)現(xiàn)濾光鏡效果,運(yùn)用了計(jì)算機(jī)圖形學(xué)中的深度緩存(Z-Buffer)技術(shù)。Z-Buffer是幀緩存中的一種,它用來(lái)存儲(chǔ)畫(huà)面上每個(gè)像素內(nèi)可見(jiàn)表面采樣點(diǎn)的深度,是一個(gè)獨(dú)立的深度緩存器。在計(jì)算機(jī)繪制圖形時(shí),將待處理的景物表面上的采樣點(diǎn)變換到圖像空間,計(jì)算其深度Z值,并根據(jù)采樣點(diǎn)在屏幕上的投影位置,將其Z值與已存儲(chǔ)在Z緩存上相應(yīng)象素處的深度值進(jìn)行比較。如果采樣點(diǎn)位于Z緩存記錄的可見(jiàn)點(diǎn)之前,則將該采樣點(diǎn)處表面顏色值填入幀緩存相應(yīng)的像素,同時(shí)用其深度值更新Z緩存存儲(chǔ)的深度值。否則,不寫(xiě)入也不更新。
OpenGL中投影平面定義成視見(jiàn)體的前裁剪窗,位于前裁剪窗上的物體的深度值最小。于是在前裁剪窗位置上繪制兩個(gè)可切換的半透明多邊形,并且保證多邊形的大小能完全遮住整個(gè)屏幕窗口。當(dāng)系統(tǒng)需要使用濾光鏡功能時(shí),就將其中一個(gè)多邊形顯示在視景系統(tǒng)中。由于多邊形的深度值最小,它將完全顯示出,而視景中的其他物體則被該多邊形遮擋,只顯示一種被某種顏色遮罩的效果,從而實(shí)現(xiàn)濾光鏡功能。
具體實(shí)現(xiàn)時(shí),利用MultiGen Creator先將濾光鏡多邊形的模型建好,再利用視景驅(qū)動(dòng)程序OpenGVS的Import工具將該模型引入到視景系統(tǒng)中,并將模型設(shè)置在前裁剪窗的位置。為了保證能完全遮罩視景系統(tǒng)中的其他物體,可以將濾光鏡多邊形拉伸一定的長(zhǎng)度。
3.3.1 模擬人工水天線
實(shí)際觀測(cè)天體過(guò)程中,環(huán)境參數(shù)是不斷變化的,例如,當(dāng)海面有涌浪時(shí),人工水天線雖一直保持水平,但觀測(cè)者卻隨艇體搖擺。在虛擬環(huán)境中欲使操作人員有真實(shí)的測(cè)天感覺(jué),就必須人工水天線相應(yīng)變化,包括因相對(duì)運(yùn)動(dòng)引起的變化和實(shí)際情況中人工水天線的抖動(dòng),這對(duì)觀測(cè)結(jié)果的影響往往較大。因此,需要研究建立人工水天線的相對(duì)運(yùn)動(dòng)模型。
實(shí)際艇上水平陀螺儀模擬的人工水平標(biāo)線零位誤差主要由潛艇搖擺和地球自轉(zhuǎn)引起,其大小可表示為:

具體實(shí)現(xiàn)時(shí),可通過(guò)設(shè)置相機(jī)函數(shù):
GV_cam_set_rotation(GV_Camera camhdl,int platform,const G_Rotation * angles_in),其中,參數(shù)camhdl為指向場(chǎng)景中相機(jī)對(duì)象的指針(handle句柄);platform為相機(jī)對(duì)象所設(shè)置的平臺(tái)的序號(hào),參數(shù)的定義類型為整型;yrot_in指輸入的繞Y軸的旋轉(zhuǎn)角度,參數(shù)的定義類型為浮點(diǎn)型。
將人工水天線的相對(duì)運(yùn)動(dòng)與零位誤差相疊加,轉(zhuǎn)換成OpenGVS中的坐標(biāo)系(圖3),即構(gòu)成視景中的人工水天線的晃動(dòng),從而使受訓(xùn)人員有真實(shí)的測(cè)天感覺(jué)。
3.3.2 “跑星”的模擬
觀測(cè)天體時(shí),須將天體影像置于視場(chǎng)中央。因天體運(yùn)動(dòng),方位在變化,所以天體在視場(chǎng)中的位置不斷改變。尤其是潛艇航行中因涌浪搖擺,而潛望鏡導(dǎo)航視場(chǎng)僅有14°,在實(shí)際觀測(cè)過(guò)程中容易造成“跑星”的現(xiàn)象,模擬過(guò)程中必須予以充分考慮。對(duì)于天空,系統(tǒng)使天空的圖像隨潛望鏡視點(diǎn)(視向、視距)的變化而變化。
經(jīng)計(jì)算,天體方位每分鐘變化量如表1所示。由表1可知,天體方位變化量△A隨航行緯度φ和天體高度h變化。在青島地區(qū)觀測(cè)高度75°的天體時(shí),其方位每分鐘變化0.9°。對(duì)同一個(gè)天體測(cè)定五次高度約5~6分鐘,方位變化就達(dá)5°左右。導(dǎo)航視場(chǎng)僅有14°,如開(kāi)始時(shí)將天體影像放在視場(chǎng)中央,當(dāng)觀測(cè)天體的第五個(gè)高度時(shí),天體像就跑到視場(chǎng)邊緣去了。所以,在仿真實(shí)現(xiàn)時(shí),應(yīng)該考慮到這一點(diǎn)。
“跑星”的效果通過(guò)兩方面的工作來(lái)實(shí)現(xiàn)。首先是通過(guò)控置模擬海況函數(shù)實(shí)現(xiàn)因涌浪而產(chǎn)生的視場(chǎng)變化,其次是簡(jiǎn)化天體運(yùn)動(dòng)方程,并通過(guò)相機(jī)位置函數(shù)GV_cam_set_position(GV_Camera camhdl,int platform,const G_Position * pos_in)來(lái)模擬天體運(yùn)動(dòng)。在這兩個(gè)因素的共同作用下便可實(shí)現(xiàn)“跑星”的效果。
本文基于MultiGen Creator和OpenGVS仿真軟件平臺(tái),在已開(kāi)發(fā)出的潛望鏡視景仿真系統(tǒng)基礎(chǔ)上,實(shí)現(xiàn)諸如潛望鏡測(cè)天主要功能,解決了測(cè)天過(guò)程中測(cè)天人員真實(shí)感環(huán)境模擬等技術(shù)問(wèn)題,達(dá)到了潛望鏡測(cè)天視景仿真的逼真性和實(shí)時(shí)性要求,提高了受訓(xùn)人員的沉浸感和真實(shí)感。