摘 要:針對目前Vega環境中觀察者視點定位方法存在的缺陷,系統分析Vega中觀察者觀察場景原理,提出一種用于虛擬戰場環境的全角度視點模型,并對該模型算法進行分析。最后,通過仿真實驗,總結該算法的優勢所在。
關鍵詞:觀察場景;視點定位;虛擬戰場環境;全角度視點模型
中圖分類號: TP301.6 文獻標識碼:A
1 引 言
一般的VR引擎對于場景的顯示都是通過“觀察者(Observer)”機制來實現的。觀察者的視點方式就是從空間某一個具體的位置觀看某個局域場景。這種視點方式控制著視景截錐體(Viewing Frustum)的視覺表現。VR技術輔助全局視圖顯示,當用戶需要查看某個作戰實體的任務狀態的時候,VR技術需要提供作戰實體任務狀態的場景顯示。作戰任務不同,作戰執行地點不同,若始終采用單一的觀察者模式來觀測場景,會影響觀察效果,因此需要根據作戰任務的不同實現用戶觀察模式的多角度自由變換。
2 Vega環境中觀察者視點定位
Vega開發環境中提供了封裝觀察者功能的類vgObserver。實現一個vgObserver實例,可以有兩種方式[1]:一種是Lynx面板方式,一種是API實現方式。無論何種方式,都需要通過觀察者實例與運動模式、運動體、靜態坐標系、動態坐標系、場景等一系列其他實例相關聯,而且觀察模式十分單調,只有靜視點、動視點、束縛視點、導航視點等幾種固定方式。動視點實現了動態觀察,但是其運動模式十分有限,只包括旋轉、駕駛、羅盤等幾種模式。在程序編制上,一個視點的生成,典型步驟需要經過獲取位姿、獲取位姿矢量、定義運動體、定義觀察模式、定義偏移矢量等幾個步驟。這些步驟有以下缺點:
1)需要頻繁定義運動模式(vgMotion)和運動體(vgPlayer),同時也不利于類實例的管理;
2)程序編制工作量大,不便于模塊集成;
3)視點方式不自由,受控于Vega系統內核;
4)運動體一般與矢量交叉(vgIsector)相關聯,矢量交叉處理不好,隨動視點易發生觀察失真。
近年來,國內有多篇文獻提到Vega環境中自定義視點問題。文獻[2]提出了一種用戶自定義運動模型視點定位方法,主要包括下列步驟:1)vgMotionCallbackStruct重寫用戶自定義運動模型。2)vgMotRegister函數注冊自定義運動模型回調函數。3)利用pfCallloc函數為回調數據分配內存。4)調用vgUserData函數為運動模型實例初始化回調數據。5)設置VGMOT_MODEL屬性值為VGMOT_USER1,確認用戶自定義方式。文獻[3]所提出的方法和文獻[2]的方法一致,但是文獻[3]添加了鼠標控制。上述方法本文曾進行實驗,這些方法對于用戶控制鼠標觀察場景確實提供了靈活性,但不方便視點的快捷切換。
3 全角度視點模型
3.1 Vega中觀察者觀察場景原理分析
Vega中的位姿主要通過六個矢量(X、Y、Z、H、P、R)來定義。其中,X、Y代表平面坐標位置,Z代表高程。H(Heading,側擺)代表繞Z軸正向的逆時針旋轉矢量;P(Pitch,俯仰)代表繞X軸正向的逆時針旋轉矢量;R(Rolling,滾動)代表繞Y軸正向的逆時針旋轉矢量。六個矢量的位置關系如圖1所示。
3.2 全角度視點模型算法分析
在觀察者的觀測過程中,主要通過調整自身的側擺和俯仰來完成對物體的觀測。首先我們可以推導出側擺偏移量,如圖2所示。
以目標點作為坐標中心,觀察者(Observer)的空間坐標在二維平面上的投影為P'點,那么P'有可能落入二維平面的四個象限中。以第一象限為例,若P'點相對于目標點的坐標為(dx,dy)點,若觀察者想觀察到目標,根據左側擺為正,右側擺為負的原則,側擺角度為(假設arcsin 輸出為弧度,θ取角度值):