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