新聞中心

EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > 基于OPenGL的衛(wèi)星覆蓋可視化仿真

基于OPenGL的衛(wèi)星覆蓋可視化仿真

——
作者: 時間:2007-01-26 來源:《現(xiàn)代電子技術》 收藏

1 引言

本文引用地址:http://m.butianyuan.cn/article/21353.htm

opengl((open graphic library)是開放性圖形庫,他是一個三維的計算機圖形和模型庫,是由sgi公司為其圖形工作站開發(fā)的iris gl演變而來的[2]。opengl最顯著的特點是與硬件系統(tǒng)的無關性,可方便地將應用程序移植到另一個操作系統(tǒng)中,他能直接面向硬件調用3d處理功能,故處理3d圖形速度特別快。

對于開發(fā)者而言,opengl是包含幾十個指令或函數(shù)的集合,包括物體旋轉、平移縮放、材質、光照、紋理、象素、位圖、文本以及提高圖形表現(xiàn)性能等。利用這些函數(shù)對三維的幾何對象進行描述,并利用坐標變換、對象著色、光照、消隱及映像到二維屏幕處理,最終實現(xiàn)三維圖形的顯示[2],他基本上涵蓋了開發(fā)可視化圖形程序的方方面面。

2 opengl圖形的實現(xiàn)

2.1 opengl體系結構

opengl是一個與平臺無關的三維圖形接口,操作系統(tǒng)必須提供象素格式管理和渲染環(huán)境管理。opengl在windows上的實現(xiàn)是基于client/server模式的,應用程序發(fā)出opengl命令,由動態(tài)鏈接庫opengl32.dll接收和打包后,發(fā)送到服務器端的winsrv.dll,然后由他通過ddi層發(fā)往視頻顯示驅動程序。如果系統(tǒng)安裝了硬件加速器,則由硬件相關的ddi處理[1]。

opengl/nt的體系結構如圖1所示。

2.2 opengl渲染描述表(rc)與windows設備描述表(dc)

opengl的繪圖方式與windows一般的繪圖方式是不同的,opengl使用的是渲染描述表rc(render context)繪圖,并且采用特殊的象素格式,而windows采用的是gdi繪圖,使用時必須指定所用的設備描述表dc(device context)[3]。使用opengl也必須指定一個渲染描述表rc,以存儲opengl所需的渲染信息如象素格式等,創(chuàng)建rc時與一個dc建立聯(lián)系(rc也只能通過已經(jīng)建立了位圖格式的dc來創(chuàng)建),opengl的函數(shù)就可以通過rc對應的dc畫到相應的顯示設備上[1]。在使用opengl命令向窗口中繪圖之前,必須先建立一個rc,并使之成為當前rc。

3 衛(wèi)星覆蓋數(shù)據(jù)分析

衛(wèi)星對地觀測理論覆蓋的計算,在精度允許的前提下(可視化場景中對空間位置精度的要求有所降低),假設地球為圓球,如果單顆衛(wèi)星運行于高度為h的軌道上,則他的覆蓋幾何如圖2所示。其中ε為衛(wèi)星的最小觀測角,作為已知輸人量,s為星下點,0為衛(wèi)星,oe為地心,r為地球半徑,則覆蓋角d為:


在三維場景中為了繪制波束,需要求取σ和h,由圖2不難得到:
為了在二維場景中繪制衛(wèi)星的覆蓋情況,需要計算覆蓋邊緣,顯然在地球上這是一個圓。如圖3所示。
oe為地心,0為衛(wèi)星的星下點,過0點的經(jīng)線與衛(wèi)星覆蓋圓交于p1,p2兩點,a為覆蓋圓上一點,則a的經(jīng)緯度就是所求。在球面三角形poa中(如圖4所示)。
其中,λ1,λ2為0點和a點的經(jīng)度;δ1為0點的地心緯度;δ2為a點的地心緯度。
由上式可以解出δλ和h2,在解三角函數(shù)時要注意角度的象限,h2的范圍是o~180°,所以有第一個式子可以直接解出,而δλ的范圍是一180~180°,所以要分別解出正弦和余弦值已確定象限。有o~180°變換a,就可以求出一系列覆蓋圓的邊界點。

衛(wèi)星星下點數(shù)據(jù)采用衛(wèi)星軌道兩行根數(shù)tle文件,使用norad sgp4/sdp4軌道模型,可以獲得精確的軌道預測[4]。tle考慮了地球扁率、日月引力的長期和周期攝動影響,以及大氣阻力模型產生的引力共振和軌道衰退。tle是"平均"根數(shù),他用特定的方法去掉了周期擾動項;預測模型必須用同樣的方法重構周期擾動項。因此,tle并不適用于所有的解析解模型,為了獲得高的預測精度,應該采用1980年12月norad公布的數(shù)學模型,該文的模型選用norad的sgp4和sgp4模型。sgp4模型用于近地目標,是lane和cranfordl969年解析理論的簡化。地球引力場模型采用von-zeipel正則變換方法給出的攝動解結果;大氣模型采用密度加權函數(shù)。sgp8是sgp4的外延,用于深空目標。深空方程由hujsak于1979年開發(fā),模型考慮了地球扁率和日月引力。文中。利用sgp4/sdp4模型計算衛(wèi)星星歷,再根據(jù)衛(wèi)星的星歷計算星下點軌跡的經(jīng)緯度。星下點軌跡數(shù)據(jù)包括:衛(wèi)星從軌道根數(shù)基準時間開始所經(jīng)歷的時間,星下點的瞬時經(jīng)緯度。這些數(shù)據(jù)雖然比較精確,但是不夠直觀和形象,采用等距墨卡托投影方法,將星下點投影到地球平面圖上進行繪制和顯示,使其具有形象,直觀的特點。

4 用opengl實現(xiàn)場景繪制的步驟

使用visual c++6.o在單文檔界面中繪制opengl場景,步驟為:

(1)在單文檔窗口的創(chuàng)建過程中,設置象素格式和窗口的屬性和風格,并在初始化窗口初始化時調用settimer()函數(shù)。

(2)獲得windows設備描述表dc,然后將其與事先設置好的opengl繪制描述表rc聯(lián)系起來;

(3)編寫opengl繪制函數(shù)renderscence(),調用drawbackground()函數(shù)繪制地圖背景和rendline()函數(shù)繪制星下點軌跡;

(4)在ondraw中調用opengl繪制函數(shù)renderscence();

(5)在onsize()方法中定義視圖投影變換函數(shù),由于這里需要將地球表面展開,使用正交投影函數(shù)gluorth02d(一180,180,一90,90);

(6)當退出opengl圖形窗口時,釋放opengl繪制描述表rc和windows設備描述表dc。

5 衛(wèi)星星下點軌跡顯示的關鍵技術

5.1 地球平面圖的顯示

從bmp文件讀入地球平面圖紋理,步驟是:首先用loadbmp函數(shù)打開bmp紋理文件,返回一個aux rg_bgbimagerec結構的數(shù)組指針,然后利用這個數(shù)組指針參數(shù)調用gitexlmage2d函數(shù)生成紋理,另外調用opengl中的gltexparameteri函數(shù)設置紋理的過濾類型[2]。調用gigentextures函數(shù)創(chuàng)建紋理對象,用背景繪制函數(shù)drawbackground()綁定紋理對象,并指定紋理坐標映射。紋理裝載函數(shù)主要代碼:


地圖背景繪制函數(shù)drawbackground()的主要作用是將載入的紋理粘貼在指定的矩形上,并繪制等距墨卡托投影地圖的經(jīng)緯刻度線,地圖上經(jīng)緯度之間的間隔距離相同。主要代碼如下:

5.2 衛(wèi)星覆蓋的繪制

衛(wèi)星覆蓋的繪制是該文的關鍵部分。首先需要進行坐標轉換,將衛(wèi)星覆蓋經(jīng)緯度映射到計算機屏幕上的客戶區(qū)。


圓球上的一個圓投影到二維地圖上,其形狀很復雜,這給覆蓋在二維視圖中的繪制帶來很大的困難。但是仔細的分析衛(wèi)星對地觀測覆蓋的特點,這些復雜的圖形可以分成3大類:

(1)覆蓋包含南(北)極

覆蓋包含南(北)極的情形如圖5所示,此時覆蓋于一90°(90°)緯線以及180°和一180°經(jīng)線構成封閉圖形,可以在緯度一90°(90°)對應各點(即經(jīng)度相同的點)填加相同緯度的點進行繪制。
(2)覆蓋跨越180°經(jīng)線

此時覆蓋被分成2部分,分別與180°經(jīng)線和一180°經(jīng)線構成封閉圖形(如圖6所示),這種情況下可以在這兩條經(jīng)線上添加對應的點進行繪制。
(3)覆蓋的投影保持封閉

除去上面兩種情況,覆蓋都會保持為封閉圖形,這種情況比較好處理(如圖7所示),只是要注意opengl不支持凹多邊形繪制,而此時無法保證封閉圖形式凸多邊形,因此不能使用gl_polygon指令繪制。

5.3 啟用雙緩存顯示技術

為了實現(xiàn)衛(wèi)星運行的動畫效果,使用opengl的雙緩存技術[1],該技術使用2個前后臺2個緩存繪制畫面,在顯示前臺緩存內容中的一幀畫面時,后臺緩存正在繪制下一幀畫面,當后臺緩存繪制完畢,后臺緩存內容便顯示在屏幕上,而前臺此時又在繪制下一幀畫面內容。如此循環(huán)反復,屏幕上顯示總是已經(jīng)畫好的圖形,看起來所有的畫面都是連續(xù)的。場景繪制函數(shù)renderscence()中調用swapbuffers()函數(shù)來實現(xiàn)雙緩存顯示。

6 結 語

本文在windows平臺下利visual c++和opengl實現(xiàn)了衛(wèi)星星下點軌跡的二維可視化顯示,并介紹了其中的關鍵技術。只要繼續(xù)擴展其功能,就可以為衛(wèi)星觀測和軌道預報提供服務。


c++相關文章:c++教程




關鍵詞:

評論


相關推薦

技術專區(qū)

關閉