基于osgEarth的空间态势三维场景视点控制与卫星轨道绘制
基于osgEarth的空間態(tài)勢三維場景視點控制與衛(wèi)星軌道繪制
文章目錄
- 基于osgEarth的空間態(tài)勢三維場景視點控制與衛(wèi)星軌道繪制
- 一、問題的提出
- 二、視點控制方法
- 三、衛(wèi)星軌道繪制
- 四、效果
一、問題的提出
osgEarth提供了全球地形的實時顯示,同時實現(xiàn)了SkyNode類,可以向場景中加入太陽、月亮和星空背景的顯示,因此基于osgEarth很容易構(gòu)造空間態(tài)勢系統(tǒng)。
對于空間態(tài)勢而言,可以有兩種隨時間變化設(shè)置視點的方式。
一是將視點置于地固系中,這與一般的三維系統(tǒng)并無區(qū)別,即視點并不隨時間而改變,而只是根據(jù)操作改變視點。此時隨時間變化,地球固定不動,而太陽和星空背景隨時間變化。SkyNode類有一個接口setDateTime,其作用是根據(jù)時間計算一個相應(yīng)的旋轉(zhuǎn)矩陣,應(yīng)用到太陽和星空上。但是需要指出的是,該類的時間是格林威治時間,當我們開發(fā)基于北京時間的系統(tǒng)時,需要對該時間進行換算。
二是將視點置于慣性系中,這是一般態(tài)勢系統(tǒng)無需考慮的。相當于視點在太陽系中某個位置固定,而非在地球的坐標系中固定。此時, 太陽和星空位置基本不動,但地球在自轉(zhuǎn)。
除地球自轉(zhuǎn)與否之外,更重要的是空間態(tài)勢中衛(wèi)星軌道的顯示問題。為增強真實感或表現(xiàn)衛(wèi)星運動趨勢,空間態(tài)勢系統(tǒng)中往往會顯示衛(wèi)星的軌道。通常我們所說的衛(wèi)星軌道面,實際上是存在于慣性系中的,如果在某個固定時刻觀察,軌道上的采樣點并不處于同一平面之上。即如果在地固系下觀察,衛(wèi)星軌道上任一個點是與某個時間點相關(guān)的。在目前的STK版本中,三維場景的視點是在慣性系下的,可以看到衛(wèi)星的軌道為平面封閉圓。在STK的二維場景中,通過投影方式設(shè)置,可以以類似三維的方式呈現(xiàn),此時視點在地固系下,但其速度是非常慢的。
而很多空間態(tài)勢系統(tǒng)在視點處理問題上,往往采用地固系視點,而要實現(xiàn)地球自轉(zhuǎn)效果,則只是運用傳統(tǒng)的圖形學技術(shù),讓視點以一定速度繞地球旋轉(zhuǎn)或旋轉(zhuǎn)場景,在衛(wèi)星軌道的顯示方面,也往往不夠準確。
二、視點控制方法
系統(tǒng)中地球以及各種實體的位置都是定義在地固系下的,場景的繪制也是基于地固系進行的。
如果視點置于地固系,并不需要特別控制視點,如果視點置于慣性系,則控制方法如下:
(1)實現(xiàn)一個Timer,在其中進行視點隨時間的控制;
(2)根據(jù)上一個仿真時間,計算視點對應(yīng)的慣性系坐標;
(3)計算當前仿真時間時,該慣性系坐標對應(yīng)的地固系坐標;
(4)將該地固系坐標設(shè)置為當前視點。
在上述邏輯中,createJ2000ToECEFMatrix計算慣性系到地固系的旋轉(zhuǎn)矩陣,雖然精確計算衛(wèi)星軌道時需要考慮歲差、章動和極移,但此時僅僅為了態(tài)勢顯示中的控制,單純考慮地球自轉(zhuǎn)的角度即可。
三、衛(wèi)星軌道繪制
在地固系下的衛(wèi)星軌道顯示非常簡單,預(yù)推一定時間范圍的衛(wèi)星軌道采樣點,然后采用GL_LINE_STRIP生成primitive即可。
慣性系下的衛(wèi)星軌道采用如下技術(shù):
(1)衛(wèi)星軌道采用慣性系下的采樣點(對應(yīng)星歷時間的軌道數(shù)據(jù));
(2)使用一個完整的軌道周期數(shù)據(jù),當仿真時間超出當前軌道數(shù)據(jù)對應(yīng)的時間范圍時,根據(jù)當前時間重新預(yù)推;
(3)繪制時根據(jù)當前時間,計算衛(wèi)星星歷時間到當前時間的變換矩陣,基于該矩陣繪制。
繪制類定義如上所示,其中trajectoryTransform定義了變換矩陣,繪制的幾何體是該矩陣的子節(jié)點。
QDateTime st = Application::_simCurrentTime; st = st.addSecs(-3600 * 8); SatelliteLib::Astro::AstroDateTime at; QDateTime2DateTime(st, at); CMatrix3D mats[4]; Application::_astroInterface->QueryCRFtoTRFMats(at, mats); CMatrix3D mat = mats[0] * mats[1]; osg::Matrix omat; omat.set((double*)mat.m_mat); _trajectoryTransform->setMatrix(omat);在場景中的每一幀,矩陣更新代碼如上所示。
四、效果
上圖為地固系下的場景,可以看出,此時衛(wèi)星軌道并不位于同一平面上。
上圖為慣性系下的場景,此時衛(wèi)星軌道閉合且處于同一平面上。同時,在視點控制方式改變時,衛(wèi)星當前位置與地球的位置關(guān)系是固定的、準確的。
總結(jié)
以上是生活随笔為你收集整理的基于osgEarth的空间态势三维场景视点控制与卫星轨道绘制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “非功能需求”属于模糊术语吗
- 下一篇: 大话「线程同步」