王傳喜,趙 剛
(四川大學(xué) 電子信息學(xué)院,四川 成都 610064)
視點是計算機(jī)圖形學(xué)中的概念,作用類似于攝像機(jī)的鏡頭或者人的眼睛。視點控制的過程,實質(zhì)上就是模型視圖變換的過程。視點控制包括控制視點位置和控制視點方向,其中視點的位置決定了視點與觀察者之間的距離,視點的方向決定了觀察對象是否可見。在觀察運(yùn)動物體的時候,為了有充分的時間觀察它,就需要視點的速度和物體運(yùn)動的速度相同。
在Vega環(huán)境中底層化了4種視點定位模式,分別是動態(tài)定位視點模式 (Motion Model)、束縛定位視點模式(Tether)、導(dǎo)航路徑定位視點模式(Path Navigator)、手動定位視點模式(Manual)[1]。其中束縛定位視點模式包括跟隨束縛、固定束縛、旋轉(zhuǎn)束縛3種模式;Vega環(huán)境中視點控制的過程,類似于人眼觀察環(huán)境的過程。如果視點控制不合理,即使三維模型很精、仿真系統(tǒng)的功能很完備,同樣導(dǎo)致三維視景仿真的效果不佳。
在三維視景仿真的高性能軟件Vega平臺上,文獻(xiàn)針對視點的研究有兩類:一是通過調(diào)節(jié)視角觀察一個靜止的物體[2],另一種是僅僅用Lynx編輯視點[3]。對用Lynx編輯ADF文件、Vega API編程、外部輸入設(shè)備等,聯(lián)合實時動態(tài)控制視點的文獻(xiàn)沒有闡述清楚。文中正是基于手動定位視點模式,設(shè)置合理的算法,通過Vega API編程和鍵盤聯(lián)合實時動態(tài)控制視點的。
將運(yùn)動的物體A的坐標(biāo)記為A點,將運(yùn)動的物體B的坐標(biāo)記為B點,將線段AB的中點記為M點,且M點是焦點。為了實時觀察到兩個運(yùn)動物體的全過程,需要合理的設(shè)置視點,因此采用延長BA到C點,線段AC的長度為dAC,設(shè)視點和C點的高度值相同,即視點和C點在同一水平面上,作CN垂直與CB,使線段NC的距離為dNC,則N點的三維坐標(biāo)就是視點的三維坐標(biāo)。其視點與物體空間位置關(guān)系如圖1所示。
圖1 視點與物體空間位置關(guān)系圖Fig.1 Spatial location diagram of the viewpoint and objects
C點和N點都在Z0=z的平面內(nèi),則N(xN,yN,zN),其中:
則N(xN,yN,zN)就是需要定位的視點。
利用上述視點控制算法,在三維視景仿真平臺Vega上,用Lynx編輯好ADF文件,通過實時獲取運(yùn)動物體A和運(yùn)動物體B的坐標(biāo),調(diào)用視點控制的算法實時計算出視點和焦點坐標(biāo),利用Vega API編程就可以實時觀察動態(tài)運(yùn)動物體A和運(yùn)動物體B運(yùn)動的全過程、且可以通過鍵盤動態(tài)調(diào)節(jié)視點。在編寫Vega程序之前,應(yīng)該清楚Vega程序架構(gòu)和主要執(zhí)行順序等。其系統(tǒng)工作流程圖如圖2所示。
運(yùn)行Vega應(yīng)用程序前,需對各種參數(shù)初始化,運(yùn)行期間保持參數(shù)的不斷更新。各種參數(shù)都存放在ADF文件中,Lynx界面實質(zhì)是用來編輯ADF文件的[4]。將需要用的模塊中的特定參數(shù)進(jìn)行修改,其他的參數(shù)使用Lynx界面提供的缺省值。主要配置為:將兩個運(yùn)動體模型、地景模型加入到場景中,設(shè)置運(yùn)動模型的運(yùn)動模式,利用路徑工具(Path Tool)添加運(yùn)動體運(yùn)動的導(dǎo)航路徑,將場景運(yùn)動體的定位方法設(shè)置成路徑導(dǎo)航。為了滿足實時改變觀察者位置的要求,將視點定位方式設(shè)置成手動。
圖2 系統(tǒng)工作流程圖Fig.2 Flow chart of the system operation
Vega提供了完整的C語言應(yīng)用程序接口API和豐富的函數(shù)庫。在用視點模塊設(shè)計和操作視點時,Vega也提供了相應(yīng)的類和函數(shù)。用Lynx編輯ADF文件,并解算出視點和焦點的位置信息后,在VC6.0的環(huán)境中,調(diào)用Vega API開發(fā)庫函數(shù)實現(xiàn)視點調(diào)節(jié)的功能。利用Vega實時的獲取兩個運(yùn)動體的位置信息,并通過視點控制算法計算出焦點M和視點N的三維坐標(biāo)。視點定位方法是視點相對于運(yùn)動體A相對靜止,因此視點定位采用相對于本機(jī)的手動STATIC視點,并使視點始終注視焦點。兩個運(yùn)動體在運(yùn)動的過程中,它們的坐標(biāo)位置是不斷變化、持續(xù)更新的,引起焦點也是實時變化的。通過Vega API函數(shù)調(diào)節(jié)視點的關(guān)鍵代碼如下:
pos0=vgNewPos();
//新建一個三維位置
vgPosVec(pos0,xobs,yobs,zobs,0,0,0);
//對三維位置賦值
vgProp(obs,VGOBS_TETHERSTATE,VGOBS_STATIC);
//設(shè)定視點的定位方式為手動定位
vgPos(obs,pos0);
//將三維位置信息傳遞給視點
vgPosVec(pos0,xmiddle,ymiddle,zmiddle,0,0,0);
//設(shè)定焦點的三維位置信息
vgProp(obs,VGOBS_LOOKAT_TARGET,VGOBS_L_POS);
/
/設(shè)定視點的屬性是觀察具體的三維坐標(biāo)點
vgObservLookatPos(obs,pos0);
//設(shè)定視點觀察的是焦點信息
在三維實時視景仿真系統(tǒng)中,為了獲得最佳的觀察效果,需要對視點調(diào)試算法中的dAC和dNC的大小實時動態(tài)的調(diào)節(jié)。在三維視景仿真中,習(xí)慣并普遍流行用鍵盤控制運(yùn)動這種操作方式。因此采用鍵盤實時調(diào)節(jié)dAC和dNC的大小,協(xié)同控制視點的方法。 其中 keyInput(vgWindow*win)[5]函數(shù)用于響應(yīng)所有的鍵盤事件,實際上處理鍵盤的函數(shù)是vgGetWinKey(vgWindow*win),此函數(shù)返回被按下鍵的相應(yīng)的ASCII碼整數(shù)值[6],*win代表指向Vega窗口的指針。幀循環(huán)中加入鍵盤輸入事件,就可以通過鍵盤動態(tài)調(diào)節(jié)視點相對于運(yùn)動體A的相對位置,優(yōu)化三維視景仿真系統(tǒng)中的視點調(diào)節(jié),增加沉浸感。其按鍵協(xié)同調(diào)節(jié)視點的定義如表1所示。
表1 按鍵協(xié)同調(diào)節(jié)視點的定義Tab.1 Definition of keyboard collaborative control viewpoint
在Vega視景仿真平臺上,以飛機(jī)為例,通過實時動態(tài)的控制視點,實時逼真的再現(xiàn)了飛機(jī)B從遠(yuǎn)方逐漸向飛機(jī)A接近的全過程,且可以通過鍵盤實時動態(tài)調(diào)節(jié)視點,仿真效果良好。飛機(jī)A與飛機(jī)B的距離是698 m的仿真圖如圖3所示。飛機(jī)A與飛機(jī)B的距離是172 m的仿真圖如圖4所示。
圖3 兩架飛機(jī)距離是698 m的仿真圖Fig.3 Distance of two plane:698 meter
文中在三維視景仿真的高性能軟件Vega平臺上,深入研究視點控制的基本原理,建立了三維數(shù)學(xué)模型,提出了用向量解算動態(tài)的視點和焦點位置的方法,借助Vega API編程和外部輸入設(shè)備,實現(xiàn)了實時動態(tài)觀察兩個物體運(yùn)動的全過程,并且可以用鍵盤協(xié)同控制視點,驗證了視點控制算法的正確性、有效性,提高了三維實時視景仿真直觀性、靈活性、可控性,增強(qiáng)了視景仿真的真實性、實時性和交互性。本項視點控制的研究具備較好的通用性,對于某些對視點要求較高的三維視景開發(fā)系統(tǒng)有較大的推廣價值,對于基于底層的OpenGL視景仿真開發(fā)也有一定的借鑒意義。
圖4 兩架飛機(jī)距離是172 m的仿真圖Fig.4 Distance of two plane:172 meter
[1]龔卓蓉.Lynx圖形界面[M].北京:國防工業(yè)出版社,2002.
[2]陳亮,歐陽清,劉志強(qiáng).虛擬艦船艙室的無遮擋顯示研究[J].艦船電子工程,2010(1):156-159.
CHEN Liang,OU YANG-qing,LIU Zhi-qiang.Research on accessibility show in the virtual Scene of a cabin[J].Ship Electronic Engineering,2010(1):156-159.
[3]宋志明,康鳳舉.視景仿真的關(guān)鍵技術(shù)[J].計算機(jī)應(yīng)用,2004(5):67-68.
SONG Zhi-ming,KANG Feng-ju.Key techniques in scene simulation[J].Computer Applications,2004(5):67-68.
[4]MultiGen-Paradigm Inc.Lynx User s Guide(Version 3.7)[M].Dallas:MultiGenPar-adigm Inc,2001.
[5] MultiGen-Paradigm Inc. Vega Programmers Guide(Version3.7)[M].Dallas:MultiGenPar-adigm,Inc,2001.
[6]王乘,李利軍,周均清,等.Vega實時三維視景仿真技術(shù)[M].武漢:華中科技大學(xué)出版社,2005.