鄭元珠
(南京電子技術研究所,南京210013)
基于光柵掃描雷達顯示器的優越性,現代雷達的終端一般采用光柵掃描雷達顯示器。目前雷達的終端顯示技術向小型化方向發展,并且集雷達分系統多種功能于一體。用戶對雷達終端顯示軟件的功能需求越來越復雜。
現代戰爭中,空情目標復雜多變,雷達目標常常是多方向、多批次和高速度的。操作員人工錄取目標已經不適合戰場需求,一般雷達系統已經實現對目標半自動錄取和自動錄取。同時希望對當前的一些特殊空情態勢以靜態數字化圖片的形式真實保存下來供事后分析。終端畫面不僅具有實時顯示雷達信息功能,而且要求對畫面二次航跡圖形信息進行保存,即雷達終端的顯控軟件必須具有“抓屏”功能。在系統運行過程中,當用戶按下鍵盤上某個功能按鍵或者鼠標選擇某個菜單項時,顯控軟件能夠將當前屏幕的航跡信息以某種圖像文件的格式保存到計算機硬盤上,該圖像文件供事后情報分析處理使用。
雷達終端操作系統選擇必須充分考慮實時性、穩定性、可靠性、安全性及多任務處理的需求。雷達小型化終端集數據處理、設備操作控制、顯示及情報上報等多功能于一體。該終端承擔與上級指揮所之間數據交換的功能,因此要求該終端系統必須具有很強的實時性。由于終端系統各個功能模塊間有一定的離散性和耦合性,因此要求系統中實現各個功能模塊的任務之間具有相對的獨立性和“并發性”,且各個任務根據不同“緊迫感”應具有不同的優先級。綜上所述,雷達系統要求終端系統具有實時處理多任務的能力。
根據以上多方面的要求和特點,基于優先級搶占式的多任務實時操作系統VxWorks便成為小型化雷達終端首選操作系統。它很好地解決了以往單任務模式的操作系統和以時間片為調度基礎的多任務操作系統在多任務處理和實時性之間的矛盾。與VxWorks實時操作系統配套的Tornado集成開發環境在軟件開發和調試方面所具有的靈活性,使得軟件開發周期大大縮短。
VxWorks操作系統是當前應用比較廣泛的嵌入式操作系統之一,其圖形環境接口支持OpenGL規范。目前嵌入式操作系統對圖形界面接口功能支持較弱,效率不高,這是目前業界研究的一個熱點。在Windows操作系統下,操作系統直接支持屏幕截圖功能,用戶只需按下鍵盤“Print Screen”按鍵,操作系統便能夠自動將當前屏幕信息拷貝到系統的剪貼板中,用戶再從剪貼板將該數據拷貝到相關應用程序(如畫圖軟件或其它圖形軟件),再以指定的文件格式保存所截取的圖形數據。可惜VxWorks操作系統不提供該方面的接口功能,一切需要應用程序自己實現。
對于雷達光柵顯示系統,若想獲得屏幕的所有顯示信息,最直接的方法是獲得顯卡中顯存的像素數據,依據該數據的格式進行解包,然后再編碼以某種圖像文件格式保存到計算機硬盤。這需要顯卡的底層驅動支持,而且開發人員必須熟悉顯示芯片的寄存器結構及使用方法,同時廠家必須提供這方面的技術資料,實際上顯示芯片的一些關鍵資料常常是很難得到的。
針對上述情況,只有另僻蹊徑,嘗試從其它途徑尋找解決問題的方法。經過努力,發現使用Open-GL的幀緩存技術可以獲得雷達終端顯示畫面目標二次航跡信息,從而使該問題得到較完美的解決。
OpenGL是圖形硬件的一個軟件接口,目前有多種操作系統支持該規范,VxWorks操作系統提供對該規范的接口功能。它的主要作用是將二維或三維的對象繪入一個幀緩沖區中。對象被描述為一系列的頂點(用來定義幾何對象)或像素(用來定義圖像)。OpenGL對數據進行幾個步驟的處理從而將其轉換成像素,這些像素在幀緩沖區中形成最終需要的圖形。
在OpenGL中,圖形操作的基本對象(實體)為圖元,圖元分為幾何圖元和非幾何圖元。OpenGL基于所謂的“管道模型”(pipleline model)。圖形圖元在應用程序內部生成,并經由管道傳送。管道中包含一系列模塊,每個模塊都對經過的圖元采取一項或多項操作。有些模塊提供轉換功能,能旋轉、轉換或縮放對象,有些模塊負責對于OpenGL的照相機來定位對象;另一些模塊則判斷對象是否在照相機的視界內。在管道的末尾,那些可見的圖元會被轉換成屏幕上的彩色像素。圖1表示了一種管道模型。

圖1 OpenGL管道模型
在OpenGL中,每個圖像系統的背后都有一個用于生成圖像的幀緩存。幀緩存實際上是一個緩存集合。對于屏幕空間上的每個x,y值,都有與之相對應的位組,該位組可以看作是通用圖片圖元或像素。這些像素可以由32位前臺緩存RGBA值、32位后臺緩存RGBA值和32位深度緩存值各位的合成。位組的大小通常是字節的整數倍。可以根據幀緩存中寫操作執行的位置寫入深度像素或 RGBA像素。OpenGL允許使用一次函數調用來讀取或者寫入該類像素的矩形塊。該操作被稱為位塊傳輸操作。
讀取像素操作包括定位到幀緩存的正確位置并從該位置提取數據。然而實際情況并不是如此簡單,必須考慮像素格式在應用程序、文件及幀緩存內部的差別,還必須考慮不同體系存儲離散數據方式的差異給處理帶來的復雜性。
像素管道處理過程如圖2所示。

圖2 OpenGL像素管道模型
OpenGL提供了3個處理圖像數據的基本函數:
(1)glReadPixel():從幀緩存中讀取一個矩形像素陣列,并將其存儲到處理器內存中。
(2)glDrawPixel():從處理器內存中讀取一個矩形像素陣列,并根據glRasterPos*()指定的當前光柵位置,將其寫入到幀緩存中去。
(3)glCopyPixel():將一個矩形像素陣列從幀緩存的一個地方復制到另一個地方;其功能類似于調用glReadPixel()和glDrawPixel(),但不將數據寫入到處理器內存。
在應用程序中,主要用到glReadPixel()函數,將像素從幀緩存轉移到系統內存。該函數的原型為:
Void glReadPixels(Glint x,Glinty,GLsizei w,GLsizei h,GLenum format,Glenum type,GLvoid*array)。
該函數功能是從幀緩存的(x,y)開始,讀取w×h個像素矩形,放入計算機緩存array。像素格式由format指定,寫入數據類型是type。
雷達終端顯示軟件使用該函數獲取當前幀緩存中顏色緩存數據,然后進行解包、編碼,保存圖像文件,實現屏幕“抓屏”功能。
BMP圖像文件最早應用于Microsoft Windows系統,由于桌面操作系統的普及,對BMP圖像文件系統支持越來越多。BMP文件格式有以下特點:
(1)設備獨立性,它以一種獨立于設備的方法描述位圖;
(2)可用非壓縮格式存儲圖像數據,保證解碼速度快;
(3)支持多種圖像的存儲。
BMP圖像文件由以下幾部份組成:位圖文件頭(BITMAPHEADER)數據結構;位圖信息(BITMAPINFO)數據結構;位圖陣列。
各數據結構的詳細格式及含義參見相關資料。由于BMP文件格式對圖像數據沒有壓縮,多操作系統支持,從OpenGL幀緩存所得到的數據不需要特殊處里,可以直接保存為bmp格式文件,所以選用該格式保存圖像數據。
程序部分代碼如下所示:



像素讀取的返回值受幀緩存分辨率限制。讀取像素值時,首先應該檢查當前像素顏色分辨率位數,可以使用類似下面查詢函數來確定位數:glGetIntegerv(GL_RED_BITS,&nbits)。
讀寫RGBA值時,在幀緩存中處理顏色緩存。當應用程序在單緩存模式時,默認情形下,在Open-GL前臺顏色緩存(GL_FRONT)執行讀和寫操作。在雙緩存模式中,默認情形是在后臺(GL_BACK)繪制對象。
大多數OpenGL還支持其它顏色緩存。所以在程序中必須指定所操作的緩存對象,使用函數gl-ReadBuffer()為讀操作選擇一個緩存。
使用函數glReadPixels()來讀取RGBA或顏色索引時,必須指出要從哪個緩存中讀取。例如,如果使用了雙緩存,必須指出要從前緩存還是后緩存讀取數據。為此,可使用函數glReadBuffer()選擇要讀取的緩存類型。
在本應用程序中,每屏抓取后保存的BMP格式圖像文件大小計算如下:
假設雷達終端屏幕顯示分辨率為1600×1 200,每像素顏色采用24位表示,以非壓縮格式保存。位圖文件頭為14字節,位圖信息結構體長度為40字節,則保存后文件大小為:1 600×1 200×3+14+54=5 760 054字節。
上述文件占用空間較多,在任務執行完畢,可以將上述文件拷貝到Windows操作系統下,運行其它圖像處理軟件(如PhtoShop,ACDsee等軟件),將上述BMP文件進行壓縮或者轉換為其它格式圖形文件(如JPEG格式)。
之所以沒有進行實時壓縮,主要考慮到圖像壓縮處理運算需要消耗較多的計算機資源,對顯示軟件的其它任務運行會產生一定的影響,所以留到任務結束后再處理。因為只要獲得了顯卡的原始顯示數據,圖像數據的后續處理技術途徑較多,不再贅述。
采用OpenGL幀緩存操作技術和BMP圖像文件技術解決了VxWorks操作系統下雷達終端顯示軟件對目標航跡圖像獲取及保存問題。實踐證明在目前應用條件下,該項技術的應用滿足用戶對雷達系統的功能需求。圖3所示為VxWorks操作系統下所獲得的雷達屏幕二次航跡圖像信息文件在Microsoft Window s操作系統下的顯示。圖像文件格式為BMP,用普通的圖像文件瀏覽器就能查看。該二次航跡信息與屏幕航跡信息一致,無信息丟失。目前在顯示軟件中僅用到OpenGL幀緩存中的顏色緩存,沒有使用到深度緩存、累積緩存等其它緩存。幀緩存中其它緩存對屏幕“截圖”結果的影響及處理有待后續工作中進一步探索。

圖3 雷達二次航跡圖像文件在Microsoft Windows下恢復顯示(部分畫面)
[1]丁鷺飛.雷達原理[M].第3版.西安:西安電子科技大學出版社,2002.
[2]Edward Angel(美).OpenGL程序設計指南[M].第2版.李桂瓊譯.北京:清華大學出版社,2005.
[3]董士海.圖像格式編程指南[M].北京:清華大學出版社,1995.