王志樂,董軍宇2,胡文婷
(1.海軍航空大學(xué) 青島校區(qū)軍用虛擬仿真研究與訓(xùn)練中心,山東 青島 266041;2.中國海洋大學(xué) 信息科學(xué)與工程學(xué)院,山東 青島 266100)
現(xiàn)代飛機(jī)航電系統(tǒng)已經(jīng)由原先的分立式、聯(lián)合式[1]變?yōu)楝F(xiàn)在的集成模塊化[2]、分布式的航電系統(tǒng),由于先進(jìn)的電子信息技術(shù)在航電系統(tǒng)上的應(yīng)用,使得航電系統(tǒng)功能越來越強(qiáng)大,交聯(lián)越來越復(fù)雜,涵蓋了飛控、顯控、雷達(dá)、導(dǎo)航、通信、任務(wù)等子系統(tǒng)[3],該系統(tǒng)也成為現(xiàn)代先進(jìn)飛機(jī)的核心系統(tǒng),成為衡量飛機(jī)先進(jìn)性能的核心指標(biāo)之一。所有子系統(tǒng)的數(shù)據(jù)可視化顯示與處理、人機(jī)交互都是通過顯示與控制系統(tǒng)完成,這也對座艙顯控系統(tǒng)的開發(fā)和性能帶來挑戰(zhàn)。
座艙顯控系統(tǒng)作為飛行員與機(jī)載傳感器的人機(jī)交互系統(tǒng),其中機(jī)載顯示系統(tǒng)直接顯示飛行數(shù)據(jù)、戰(zhàn)術(shù)數(shù)據(jù)、疊加圖像等,顯示的視覺效果、圖形生成的效率直接影響飛行員的視覺判斷和作戰(zhàn)時機(jī)[3]。然而飛行顯示系統(tǒng)需要實(shí)時地獲取飛行傳感器指令,經(jīng)過計算處理后動態(tài)地顯示飛行儀表圖形、交互菜單、任務(wù)圖形、目標(biāo)及外部環(huán)境等信息,并且對顯示系統(tǒng)的實(shí)時性、穩(wěn)定性、安全性有很高的要求。當(dāng)前,主流的設(shè)計方式都是將顯示圖形預(yù)先制作成貼圖,然后通過國外專業(yè)的儀表開發(fā)工具如GL Studio、IData、VAPS等[4-6]進(jìn)行開發(fā)。由于顯示的圖形種類和數(shù)量龐大、字符類型多,很多是按畫面整體顯示的圖形進(jìn)行設(shè)計,這類方法入門比較簡單,但是顯示系統(tǒng)復(fù)用率低、集成性差、無法實(shí)現(xiàn)重構(gòu),類似機(jī)型或相同機(jī)型升級都需要重新設(shè)計研制機(jī)載顯示系統(tǒng)。另外,采用貼圖方式顯示的圖像符號視覺效果差,而且使用大量的貼圖影響顯示畫面生成的效率。所以本文對機(jī)載顯示系統(tǒng)各類圖形進(jìn)行分層級抽象建模,提出了基于抽象工廠模式[7]對機(jī)載顯示圖形的三級建模架構(gòu),最后采用OpenGL[8]實(shí)現(xiàn)了圖形模型開發(fā)庫和機(jī)載顯示系統(tǒng)圖形生成架構(gòu),實(shí)驗(yàn)證明顯示效果比貼圖方式好、圖形生成效率更高,并且可以實(shí)現(xiàn)機(jī)載顯示系統(tǒng)的軟件重構(gòu)。
當(dāng)系統(tǒng)所需要的產(chǎn)品對象是多個位于不同產(chǎn)品等級結(jié)構(gòu)中屬于不同類型的具體產(chǎn)品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài),與普通工廠方法模式最大區(qū)別在于,工廠方法模式針對的是一個產(chǎn)品等級結(jié)構(gòu),而抽象工廠模式則需要面對多個產(chǎn)品等級結(jié)構(gòu)。
當(dāng)一個工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個產(chǎn)品族[9]中的所有對象時,抽象工廠模式比工廠方法模式更為有效率。產(chǎn)品族和產(chǎn)品等級結(jié)構(gòu)關(guān)系如圖1。
圖1 產(chǎn)品族與產(chǎn)品等級結(jié)構(gòu)關(guān)系
因此可以采用抽象工廠模式將機(jī)載飛行顯示系統(tǒng)所有圖形庫按產(chǎn)品族和產(chǎn)品等級進(jìn)行抽象,將機(jī)載顯示圖形庫進(jìn)行分級建模形成標(biāo)準(zhǔn)的圖形生成對象,對字符、圖形、窗口進(jìn)行抽象統(tǒng)一建模,再利用抽象工廠模式對圖形處理模型、繪制模型、顯示模型進(jìn)行系統(tǒng)架構(gòu)設(shè)計。首先對顯示圖形庫進(jìn)行分類抽象,形成機(jī)載顯示圖形類結(jié)構(gòu)如圖2。
圖2 機(jī)載顯示圖形類結(jié)構(gòu)
由于抽象工廠模式屬于類創(chuàng)建型模式,它的目的是為一系列的、相互關(guān)聯(lián)的具體類提供統(tǒng)一的創(chuàng)建接口[10]。抽象工廠從圖形繪制模型代碼中隔離出了創(chuàng)建具體對象的操作,把所有對相互關(guān)聯(lián)的類的創(chuàng)建操作組織到一起,為其他類提供高層的、經(jīng)過封裝的對象創(chuàng)建操作[9]。為了方便闡述抽象工廠模式,引入標(biāo)準(zhǔn)化的產(chǎn)品族,將不同分級結(jié)構(gòu)但功能相關(guān)聯(lián)的圖形對象組成家族,其抽象工廠接口類如圖3所示。
圖3 圖形家族抽象工廠接口類
基于抽象工廠模式的思想創(chuàng)建統(tǒng)一的接口類,可以通過基類快速的創(chuàng)建圖形產(chǎn)品族或者基于產(chǎn)品等級資源庫創(chuàng)建新的圖形樣式,然后在圖形內(nèi)部完成新增功能和特性。
在顯示圖形抽象建模的設(shè)計過程中,采用產(chǎn)品族的概念進(jìn)行分類分級描述,將圖形的特征處理進(jìn)行分類建模。將機(jī)載航空電子系統(tǒng)顯示的圖形圖像分為字符模型、基本圖形模型、復(fù)雜圖形模型、窗口模型,其中字符模型描述漢字字符和英文字符,基本圖形模型描述線、矩形、圓弧、三角形等,復(fù)雜圖形模型在基本圖形模型的基礎(chǔ)上進(jìn)行建模描述,如表示飛機(jī)姿態(tài)的天地圓、填充橢圓、填充帶邊框矩形等。
字符模型作為一種基本的顯示圖形,其繪制如表1所表。字符結(jié)構(gòu)模型={字體|坐標(biāo)|寬度|高度|旋轉(zhuǎn)角|下劃線|刪除線|斜體},字符模型繪制處理類分為英文字符處理、漢字字符處理,其中英文字符采用ASCII繪制,漢字字符采用位圖顯示方式,由于漢字字符的顯示比較特殊,這里在OpenGL環(huán)境下以漢字繪制類進(jìn)行抽象描述,如表1所示。
表1 漢字繪制類
其中漢字的繪制處理在PrintText接口中完成,在Windows環(huán)境下OpenGL常用的位圖字符顯示方法包括:(1)通過制作位圖字符的顯示列表來顯示,但對于漢字字符將大量消耗資源;(2)利用紋理貼圖原理,將事先要顯示的漢字制作成貼圖,但運(yùn)行時無法修改,只能適用于少量的漢子顯示;(3)讀取點(diǎn)陣字庫信息,利用glBitMap()函數(shù)顯示,讀取顯示效率高,但是放大或者縮小會存在鋸齒現(xiàn)象。針對上述方法的特點(diǎn),采用GDI提出的TrueType平面位圖文字顯示法。
利用TrueType矢量字體的與設(shè)備無關(guān)性、靈活性好等特點(diǎn),結(jié)合OpenGL的位圖顯示技術(shù),實(shí)現(xiàn)了矢量漢字靈活顯示方法。其基本繪制模型如圖4所示,在漢字矢量處理類中調(diào)用OpenGL位圖數(shù)據(jù)結(jié)構(gòu)及位圖處理函數(shù)實(shí)現(xiàn)漢字顯示處理。
圖4 矢量漢字繪制模型
在進(jìn)行基本圖形處理建模過程中,將漢字納入到基本圖形中,漢字繪制類實(shí)現(xiàn)之后,就可以和其他基本圖形處理一起集成到基本圖形處理類中,這里基本圖形定義為:線、矩形、圓形、三角形、扇形或圓弧、多邊形、窗口?;緢D形定義的太詳細(xì)或者太粗糙都不利于復(fù)雜圖形的構(gòu)建和圖形的調(diào)用顯示。因此在采用抽象工廠模式創(chuàng)建圖形處理類時,首先創(chuàng)建基礎(chǔ)的圖形接口基類,如表2所示。
表2 圖形接口基類
其中CreateIMG接口參數(shù)在完成創(chuàng)建圖形對象過程中必然要使用CDC類,因此該接口的定義如下:
virtual bool CreateIMG(CDC *pDC, enIMGShowTypeDef enType,bool bIsColor)=0;
參數(shù)enIMGShowTypeDef表示載機(jī)顯示系統(tǒng)的某種類型的物理顯示設(shè)備,如MFD1MFD2HUDHMD等。
在進(jìn)行基礎(chǔ)圖形類庫的開發(fā)過程中,需要使用Opengl32.dll和Glu32.dll,因此這里基于OpenGL圖形接口, 結(jié)合基礎(chǔ)圖形繪制模型的特點(diǎn),以及開放式航電顯示系統(tǒng)設(shè)計的技術(shù)要求,設(shè)計專用的圖形繪制類接口CBaseDraw,主要包括圖形繪制類函數(shù)和圖形控制類函數(shù),該接口類的模型如表3所示。
復(fù)雜圖形處理類模型CGLImageDraw的定義是基于IIMGModel進(jìn)行派生的,由于復(fù)雜圖形也是基于基本圖形庫產(chǎn)生的,因此需要引用CBaseDraw,其模型定義如表4所示。
表3 基礎(chǔ)圖形繪制模型
表4 復(fù)雜組合圖形模型
CGLImageDraw類的具體定義如表5所示。
在復(fù)雜圖形模型的繪制過程中,可以采用貼圖實(shí)現(xiàn),這種方法對開發(fā)人員的技術(shù)水平要求不高,并且開發(fā)過程簡單,但是靈活性和重用性不強(qiáng),顯示效果也不好。一般戰(zhàn)斗機(jī)的圖形顯示符號達(dá)到100余種,都采用貼圖之后在顯示過程中系統(tǒng)占用的資源比較高。因此基于設(shè)計的基本圖形處理類通過圖形繪制算法創(chuàng)建復(fù)雜圖形,既可以實(shí)現(xiàn)圖形符號的通用性,也實(shí)現(xiàn)了圖形繪制算法的重構(gòu),通過參數(shù)可以構(gòu)建不同飛機(jī)同一類別的圖形符號,而且顯示效果和軟件效率都得到大大提高。如圖5是基于GL Studio開發(fā)工具利用預(yù)先處理好的貼圖實(shí)現(xiàn)的MFD顯示效果,其特點(diǎn)是顯示的每一個字符及圖形符號都是基于貼圖圖像實(shí)現(xiàn)的,因此顯示效果受圖像分辨率影響較大,當(dāng)畫面進(jìn)行縮放時圖像容易發(fā)虛;對于可變圖形(如航線)利用GL Studio進(jìn)行動態(tài)繪制后由于沒有進(jìn)行反走樣處理,鋸齒明顯。
表5 CGLImageDraw類模型定義
圖5 GL Studio實(shí)現(xiàn)的駕駛效果和導(dǎo)航效果
利用CGLImageDraw和CBaseDraw類進(jìn)行畫面繪制時,通用基本圖形符號可以通過CBaseDraw類實(shí)現(xiàn),對于復(fù)雜組合圖形符號在CGLImageDraw類設(shè)計時實(shí)現(xiàn),通過調(diào)用OpenGL函數(shù)庫、CBaseDraw類和相關(guān)圖形處理算法實(shí)現(xiàn)。以圖1畫面中地平儀(天地圓)的實(shí)現(xiàn)為例,其組成及變化比較復(fù)雜,其特征如表6。
表6 天地圓特征表
表7 姿態(tài)刻度帶繪制
圖6 填充矩形與填充矩形疊加刻度線及刻度值繪制效果
在填充矩形顯示層上面調(diào)用CBaseDraw類的繪線接口完成刻度線的繪制,以及刻度值的繪制,其顯示效果如圖6(b)顯示。最后為了構(gòu)成天地圓的顯示效果,需要對填充矩形進(jìn)行遮擋層繪制,均分成四等分繪制遮擋圖形,遮擋圖形由多邊形和圓弧組成,主要計算出圓弧半徑和四個點(diǎn)的坐標(biāo),如表8關(guān)鍵點(diǎn)坐標(biāo)。圓弧的繪制算法如下,遮擋圓弧實(shí)現(xiàn)后的顯示效果如圖7(a)所示。
定義:circler=173。
circlex表示圓弧上某點(diǎn)X坐標(biāo),circley表示圓弧上某點(diǎn)Y坐標(biāo)
表8 關(guān)鍵點(diǎn)坐標(biāo)
采用遮擋圓弧繪制算法繪制完其他三份,至此就完成了天地圓的繪制,當(dāng)飛機(jī)姿態(tài)變化時,天地圓及刻度帶隨動,而遮擋部分始終保持不動,這樣的機(jī)理也完全符合地平儀的結(jié)構(gòu)。通過自定義類繪制效果如圖7(b)所示。基于CBaseDraw基本圖形類和復(fù)雜圖形的繪制函數(shù)、管理函數(shù)構(gòu)建CGLImageDraw類,這樣就實(shí)現(xiàn)了機(jī)載顯控系統(tǒng)的可視化圖形抽象建模。
圖7 疊加遮擋圓弧顯示效果與自定義類實(shí)現(xiàn)效果
以某型固定翼飛機(jī)飛行駕駛畫面為例,該畫面包括地平儀、飛行參數(shù)指示等[11]。利用自主開發(fā)的圖形模型庫和顯示系統(tǒng)圖形生成架構(gòu),快速的實(shí)現(xiàn)畫面繪制。該架構(gòu)首先是畫面繪制準(zhǔn)備工作,其次是利用圖形模型庫提供的SDK進(jìn)行字符、圖形和窗口的顯示。
準(zhǔn)備工作過程中,主要實(shí)現(xiàn)著色模式選擇、目標(biāo)像素深度設(shè)置、指定顏色和紋理坐標(biāo)的差值質(zhì)量、啟用點(diǎn)線反走樣和抗鋸齒[12-13],定義像素運(yùn)算算法等,其關(guān)鍵代碼如表9。
字符和圖形的顯示根據(jù)機(jī)載航電子系統(tǒng)輸出的狀態(tài)數(shù)據(jù)、傳感器測量數(shù)據(jù)、任務(wù)解算數(shù)據(jù)[14]以及顯控系統(tǒng)當(dāng)前所顯示的畫面狀態(tài)判斷下一刻應(yīng)該顯示的畫面。根據(jù)畫面圖形元素類型及圖形位置布局等特點(diǎn),調(diào)用CBaseDraw類和CGLImageDraw類提供的圖形生成算法實(shí)現(xiàn)字符、通用圖形、復(fù)雜圖形的實(shí)時繪制和顯示。圖8是采用該架構(gòu)提供的抽象圖形模型庫實(shí)現(xiàn)的某型飛機(jī)駕駛畫面和導(dǎo)航畫面的效果。
表9 顯示初始化功能
圖8 自定義架構(gòu)和圖形庫實(shí)現(xiàn)的駕駛和導(dǎo)航顯示效果
國外專用開發(fā)工具(如GL Studio、IData等),往往不支持漢字顯示,漢字和圖形都是通過貼圖實(shí)現(xiàn),因此當(dāng)顯示比例變化時顯示效果會受到影響,對于一些動態(tài)變化的圖形,需要依靠工具提供的控件和API來實(shí)現(xiàn),但工具未提供圖形反走樣處理,如圖1顯示效果?;趪鈱S霉ぞ唛_發(fā)后的軟件重用性、重構(gòu)性都大大降低,即使是貼圖的重復(fù)使用率也不高,優(yōu)點(diǎn)是對開發(fā)人員的編程技術(shù)要求不高。
基于抽象工廠模式實(shí)現(xiàn)的座艙圖形生成庫,解決了國外專用工具面臨的問題,所有的顯示符號都是圖形,并進(jìn)行了反走樣和鋸齒的處理,圖6對比圖1的顯示效果明顯提高。利用上述平臺架構(gòu)和圖形模型庫開發(fā)的任意機(jī)型的顯示系統(tǒng),通過調(diào)整視窗、修改繪制參數(shù)、增加或刪除某些圖形等可以快速的實(shí)現(xiàn)代碼的重構(gòu),而開發(fā)人員無需掌握圖形的繪制機(jī)理,只需要調(diào)用對應(yīng)圖形的繪制函數(shù),輸入位置和特征參數(shù)。表10給出了圖形生成技術(shù)與國外專用工具的對比。
通過對比傳統(tǒng)顯示系統(tǒng)的軟件開發(fā)以及利用國外軟件工具進(jìn)行開發(fā)的過程,該方法采用抽象工廠模式建立機(jī)載顯示系統(tǒng)圖形模型庫,基于OpenGL技術(shù)建立機(jī)載顯示系統(tǒng)平臺,可以快速的實(shí)現(xiàn)飛機(jī)座艙顯示系統(tǒng)的設(shè)計及開發(fā),并且不受任何平臺和工具環(huán)境限制,既適合實(shí)裝的預(yù)研設(shè)計、開發(fā),也適合各種平臺的模擬訓(xùn)練系統(tǒng)的研制。其特點(diǎn)是,對開發(fā)人員的編程能力要求較低,顯示軟件的復(fù)用率和重構(gòu)率高、繼承性好,易于移植和嵌入其他第三方軟件平臺。利用上述平臺架構(gòu)和圖形模型庫實(shí)現(xiàn)的某戰(zhàn)機(jī)座艙顯示系統(tǒng)已經(jīng)成功應(yīng)用于該型飛機(jī)分隊(duì)?wèi)?zhàn)術(shù)模擬訓(xùn)練系統(tǒng),通過仿真試驗(yàn)及結(jié)果的定性定量評價分析,該模擬器完全滿足訓(xùn)練和教學(xué)需求。
表10 圖形生成平臺與第三方工具對比