文/王潔 王凱弘 李興東 范學滿
潛望鏡是一種高精度的大型軍用光學儀器,是潛艇必須配置的重要裝備之一。戰(zhàn)時潛望鏡測天導航是一種自主定位手段,加強潛望鏡的測天訓練顯得尤為重要。但實際訓練中,往往受到天氣的影響,很難達到預(yù)期的訓練效果。另外用實裝進行訓練,設(shè)備磨損嚴重,損耗較大。在模擬訓練中,操作者脫離了真實的環(huán)境,這樣就有必要提供能表示真實環(huán)境的視景仿真系統(tǒng),其中環(huán)境效果生成及潛望鏡的測天功能模擬實現(xiàn)占有比較重要的地位。本文通過潛望鏡視景實用化研究,解決潛望鏡視景模擬中的幾個主要問題,為受訓人員提供真實感強的操作環(huán)境。
目前,基于底層的三維圖形庫OpenGL,出現(xiàn)了許多高層的三維視景開發(fā)環(huán)境。當前支持實時三維視景處理的軟件包括IRIS Performer,MultiGen-Paradigm Vega,CG2 Vtree,Lockheed Martin SE/View Quantum3D OpenGVS等。我們選用了功能比較強大的OpenGVS。
OpenGVS是Quantum3D公司的產(chǎn)品,用于3D場景圖形視景仿真實時開發(fā)。它具有很多優(yōu)點:易用性和重用性好,巨大的編程靈活性和良好的可移植特性。OpenGVS提供各種軟件資源,利用資源自身提供的API(Application Programming Interface,應(yīng)用程序接口)可以很好地以接近自然和面向?qū)ο蟮姆绞浇M織視景諸元和進行編程,來模擬視景的各個要素。圖1所示為OpenGVS的軟件資源及其相互關(guān)系。
OpenGVS既為用戶提供高層的場景管理API,同時又提供了對點、線、面等基本圖元的支持。開發(fā)人員可用系統(tǒng)提供的對象引入工具,引入在其他標準建模工具中已經(jīng)建好的三維幾何模型。用系統(tǒng)提供的場景工具、光源工具、霧工具、相機工具、通道工具、幀緩存工具等創(chuàng)建場景,控制場景中物標的運動。其中,相機工具是我們經(jīng)常用到的一種重要工具。它主要用來控制動態(tài)場景的顯示,一般來說,簡單的相機只包含單一的相機平臺。但對于某些復(fù)雜視景的需要,例如俯視、仰視,或相對于一個特定點偏移與定位相機,就需要為其相繼創(chuàng)建額外的分層控制平臺。
依據(jù)OpenGVS的軟件層次(如圖2所示),在開發(fā)潛望鏡視景驅(qū)動程序時,將已經(jīng)建好的模型通過OpenGVS提供的對象引入工具(Import Facility),引入到系統(tǒng)中進行顯示。視景的動態(tài)控制則是根據(jù)具體功能實現(xiàn)的要求,通過設(shè)置通道、相機等工具來實現(xiàn)。另外,也可用OpenGVS提供的底層函數(shù)實現(xiàn)其算法,以滿足特殊應(yīng)用的需要。
圖1:OpenGVS軟件資源及相互關(guān)系圖
圖2:OpenGVS軟件層次圖
所謂潛望鏡測天導航是指潛艇處于潛望深度航行時,使用潛望鏡導航裝置進行測天定位,確定潛艇的地理位置。在經(jīng)過改裝的模擬潛望鏡中,功能的實現(xiàn)由驅(qū)動軟件控制,星空視景變化的控制需符合運用實裝測天的一般規(guī)律,這里重點介紹與測天有關(guān)功能的實現(xiàn)方法。
實現(xiàn)潛望鏡的俯仰觀測功能,即俯仰角度范圍從-10度到+70度,是調(diào)用了OpenGVS相機工具的另一個函數(shù)GV_cam_set_rotation_x()來實現(xiàn)系統(tǒng)相機繞X軸的轉(zhuǎn)動。當操作者轉(zhuǎn)動俯仰瞄準定位機構(gòu)的俯仰定位手柄時,通過數(shù)模轉(zhuǎn)換裝置將轉(zhuǎn)動的模擬量轉(zhuǎn)換為數(shù)字量,潛望鏡通道計算機實時地將該數(shù)字量作為函數(shù)GV_cam_set_rotation_x()的旋轉(zhuǎn)角度參數(shù)輸入,以匹配相應(yīng)角度的視景。
表1:天體方位每分鐘變化量
圖3:OpenGVS坐標系
潛望鏡光學系統(tǒng)中設(shè)置了濾光鏡,用于在各種情況下提高觀察效果。為了在系統(tǒng)中模擬實現(xiàn)濾光鏡效果,運用了計算機圖形學中的深度緩存(Z-Buffer)技術(shù)。Z-Buffer是幀緩存中的一種,它用來存儲畫面上每個像素內(nèi)可見表面采樣點的深度,是一個獨立的深度緩存器。在計算機繪制圖形時,將待處理的景物表面上的采樣點變換到圖像空間,計算其深度Z值,并根據(jù)采樣點在屏幕上的投影位置,將其Z值與已存儲在Z緩存上相應(yīng)象素處的深度值進行比較。如果采樣點位于Z緩存記錄的可見點之前,則將該采樣點處表面顏色值填入幀緩存相應(yīng)的像素,同時用其深度值更新Z緩存存儲的深度值。否則,不寫入也不更新。
OpenGL中投影平面定義成視見體的前裁剪窗,位于前裁剪窗上的物體的深度值最小。于是在前裁剪窗位置上繪制兩個可切換的半透明多邊形,并且保證多邊形的大小能完全遮住整個屏幕窗口。當系統(tǒng)需要使用濾光鏡功能時,就將其中一個多邊形顯示在視景系統(tǒng)中。由于多邊形的深度值最小,它將完全顯示出,而視景中的其他物體則被該多邊形遮擋,只顯示一種被某種顏色遮罩的效果,從而實現(xiàn)濾光鏡功能。
具體實現(xiàn)時,利用MultiGen Creator先將濾光鏡多邊形的模型建好,再利用視景驅(qū)動程序OpenGVS的Import工具將該模型引入到視景系統(tǒng)中,并將模型設(shè)置在前裁剪窗的位置。為了保證能完全遮罩視景系統(tǒng)中的其他物體,可以將濾光鏡多邊形拉伸一定的長度。
3.3.1 模擬人工水天線
實際觀測天體過程中,環(huán)境參數(shù)是不斷變化的,例如,當海面有涌浪時,人工水天線雖一直保持水平,但觀測者卻隨艇體搖擺。在虛擬環(huán)境中欲使操作人員有真實的測天感覺,就必須人工水天線相應(yīng)變化,包括因相對運動引起的變化和實際情況中人工水天線的抖動,這對觀測結(jié)果的影響往往較大。因此,需要研究建立人工水天線的相對運動模型。
實際艇上水平陀螺儀模擬的人工水平標線零位誤差主要由潛艇搖擺和地球自轉(zhuǎn)引起,其大小可表示為:
具體實現(xiàn)時,可通過設(shè)置相機函數(shù):
GV_cam_set_rotation(GV_Camera camhdl,int platform,const G_Rotation * angles_in),其中,參數(shù)camhdl為指向場景中相機對象的指針(handle句柄);platform為相機對象所設(shè)置的平臺的序號,參數(shù)的定義類型為整型;yrot_in指輸入的繞Y軸的旋轉(zhuǎn)角度,參數(shù)的定義類型為浮點型。
將人工水天線的相對運動與零位誤差相疊加,轉(zhuǎn)換成OpenGVS中的坐標系(圖3),即構(gòu)成視景中的人工水天線的晃動,從而使受訓人員有真實的測天感覺。
3.3.2 “跑星”的模擬
觀測天體時,須將天體影像置于視場中央。因天體運動,方位在變化,所以天體在視場中的位置不斷改變。尤其是潛艇航行中因涌浪搖擺,而潛望鏡導航視場僅有14°,在實際觀測過程中容易造成“跑星”的現(xiàn)象,模擬過程中必須予以充分考慮。對于天空,系統(tǒng)使天空的圖像隨潛望鏡視點(視向、視距)的變化而變化。
經(jīng)計算,天體方位每分鐘變化量如表1所示。由表1可知,天體方位變化量△A隨航行緯度φ和天體高度h變化。在青島地區(qū)觀測高度75°的天體時,其方位每分鐘變化0.9°。對同一個天體測定五次高度約5~6分鐘,方位變化就達5°左右。導航視場僅有14°,如開始時將天體影像放在視場中央,當觀測天體的第五個高度時,天體像就跑到視場邊緣去了。所以,在仿真實現(xiàn)時,應(yīng)該考慮到這一點。
“跑星”的效果通過兩方面的工作來實現(xiàn)。首先是通過控置模擬海況函數(shù)實現(xiàn)因涌浪而產(chǎn)生的視場變化,其次是簡化天體運動方程,并通過相機位置函數(shù)GV_cam_set_position(GV_Camera camhdl,int platform,const G_Position * pos_in)來模擬天體運動。在這兩個因素的共同作用下便可實現(xiàn)“跑星”的效果。
本文基于MultiGen Creator和OpenGVS仿真軟件平臺,在已開發(fā)出的潛望鏡視景仿真系統(tǒng)基礎(chǔ)上,實現(xiàn)諸如潛望鏡測天主要功能,解決了測天過程中測天人員真實感環(huán)境模擬等技術(shù)問題,達到了潛望鏡測天視景仿真的逼真性和實時性要求,提高了受訓人員的沉浸感和真實感。