李 帥,崔榮華
(1.中國電子科技集團(tuán)公司第38研究所,合肥 230088;2.孔徑陣列與空間探測安徽省重點(diǎn)實(shí)驗(yàn)室,合肥 230088;3.智能情報(bào)處理重點(diǎn)實(shí)驗(yàn)室,合肥 230088)
基于OpenGL紋理映射的雷達(dá)圖像顯示技術(shù)研究
李 帥1,2,3,崔榮華1,2,3
(1.中國電子科技集團(tuán)公司第38研究所,合肥 230088;2.孔徑陣列與空間探測安徽省重點(diǎn)實(shí)驗(yàn)室,合肥 230088;3.智能情報(bào)處理重點(diǎn)實(shí)驗(yàn)室,合肥 230088)
針對雷達(dá)圖像顯示的特點(diǎn),提出了一種基于OpenGL紋理映射機(jī)理的雷達(dá)圖像顯示算法,給出了詳細(xì)的紋理映射機(jī)制步驟,闡述了雷達(dá)圖像顯示的算法和實(shí)現(xiàn)流程。該顯示算法可以滿足目前雷達(dá)圖像顯示的需求,具有很強(qiáng)的普適性。
OpenGL;紋理映射;圖像顯示
雷達(dá)圖像顯示在合成孔徑雷達(dá)的顯示技術(shù)中具有非常重要的地位。合成孔徑雷達(dá)的圖像一般是地形信息,具有要求實(shí)時(shí)顯示、數(shù)據(jù)量大、需要提供快速的放大、縮小、漫游等基本操作的特點(diǎn)。
OpenGL是由SGI公司推出的獨(dú)立于操作系統(tǒng)和硬件環(huán)境的開放式圖像庫,開發(fā)人員可以利用提供的這些函數(shù)來構(gòu)造景物模型,實(shí)現(xiàn)圖像的實(shí)時(shí)顯示。OpenGL具有強(qiáng)大的圖形功能和良好的跨平臺移植能力,已被廣泛用于可視化技術(shù)、模擬仿真等多個領(lǐng)域[1]。紋理映射技術(shù)是OpenGL中非常重要的技術(shù)之一,紋理映射通過將像素與幾何對象結(jié)合,為幾何對象營造出一種非常復(fù)雜、真實(shí)的視覺效果,同時(shí)避免了建立大量幾何模型所需要的開銷[2]。
本文結(jié)合雷達(dá)圖像顯示的特點(diǎn),采用OpenGL的紋理映射技術(shù),為雷達(dá)圖像的快速實(shí)時(shí)顯示提供了一種有效可行的方法。
1.1 紋理圖像尺寸
OpenGL的紋理映射技術(shù)與硬件平臺的支持是息息相關(guān)的。對于早期的集成顯卡,如Mobile Intel(R)96 Express Chipset Family、Intel(R) Q35 Express Chipset Family,紋理圖像的寬和高必須是2的n次方。對于早期的獨(dú)立顯卡英偉達(dá)GForce210,紋理圖像的寬度要求是4的倍數(shù),對高度沒有要求。這些硬件平臺對OpenGL紋理映射技術(shù)的應(yīng)用在軟件設(shè)計(jì)時(shí)需要密切關(guān)注。
1.2 紋理映射的步驟
雖然紋理映射比較復(fù)雜,但是一般的步驟包括以下幾個部分:
(1) 定義紋理
(a) 紋理名字的生成
紋理對象是用來存儲紋理數(shù)據(jù)的,創(chuàng)建了紋理對象,就可以根據(jù)需要將多個紋理一次性載入內(nèi)存,以便場景繪制時(shí)隨時(shí)引用。在創(chuàng)建紋理對象之前,首先需要生成紋理名稱,調(diào)用glGenTextures()函數(shù):void glGenTextures(GLsizei n,GLuint * textureNames)。
(b) 紋理對象的創(chuàng)建和使用
生成紋理名后,將紋理名稱綁定到紋理數(shù)據(jù)上,調(diào)用glBindTexture()函數(shù):void glBindTexture(GLenum target,GLuint textureName)。
(c) 載入紋理
將紋理應(yīng)用到幾何圖形上的必要步驟就是將紋理載入到內(nèi)存中。紋理通常被認(rèn)為是二維的,實(shí)際上紋理也可以是一維、三維。載入二維紋理的函數(shù)是glTexImage2D():void glTexImage2D (GLenum target, GLint level, GLint internalformat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels)。
(2) 控制紋理
紋理圖像在映射到物體時(shí)會產(chǎn)生很多問題,主要包括紋理圖像的紋理怎么對應(yīng)到屏幕上的像素,怎樣通過紋理貼圖實(shí)現(xiàn)紋理縮放和紋理重復(fù)等。調(diào)用函數(shù)glTexParameter():void glTexPaameterf(GLenum target,GLenum pname,GLfloat param),其中target參數(shù)為目標(biāo)紋理,pname參數(shù)的取值有如下幾種:GL_TEXTURE_MIN_FILTER、GL_TEXTURE_MAG_FILTER、GL_TEXTURE_WRAP_S、GL_TEXTURE_WRAP_T,param參數(shù)的取值要根據(jù)pname而定。
(3) 設(shè)置映射方式
OpenGL對于不同的渲染類型有3種紋理模式:GL_MODULATE,GL_DECAL和GL_BLEND。使用glTexEnvi()函數(shù)設(shè)置紋理模式:void glTexEnvi(GL_EXUE_ENV,GL_TEXUE_ENV_ODE,GL_DECAL)。
(4) 使用紋理坐標(biāo)
紋理坐標(biāo)控制紋理圖像中的像素如何映射到物體上。紋理坐標(biāo)可以包含1、2、3或4個坐標(biāo)值,通常用s、t、r和q來表示。OpenGL用函數(shù)glTexCoord()定義紋理坐標(biāo)。
2.1 雷達(dá)圖像顯示流程
本文中提到的雷達(dá)圖像為原始圖像RAW格式,采用OpenGL紋理映射的方式進(jìn)行圖像的顯示,圖像顯示提供漫游、放大、縮小等功能。雷達(dá)圖像的顯示流程如圖1所示。

圖1 雷達(dá)圖像顯示流程
由于雷達(dá)RAW格式的原始圖像一般都比較大,甚至達(dá)到幾十兆,考慮到圖像顯示的時(shí)效性并且可以支持圖像的實(shí)時(shí)滾動顯示,采用依據(jù)圖像顯示的大小即圖像的起始位置對雷達(dá)圖像數(shù)據(jù)進(jìn)行實(shí)時(shí)讀取的算法進(jìn)行顯示。下面針對圖像數(shù)據(jù)的實(shí)時(shí)讀取算法進(jìn)行詳細(xì)介紹。
2.2 雷達(dá)圖像數(shù)據(jù)實(shí)時(shí)讀取算法
雷達(dá)圖像與紋理圖像之間的位置關(guān)系可以按照長度、寬度2個維度進(jìn)行分開討論。圖2給出了在寬度維度下,雷達(dá)圖像與紋理圖像之間的位置關(guān)系。其中包含了2個坐標(biāo)系:一個是以紋理圖像的左上角頂點(diǎn)為原點(diǎn)建立起的DrawX-DrawY坐標(biāo)系;另外一個是以雷達(dá)圖像的左上角頂點(diǎn)為原點(diǎn)建立的ImageX-ImageY坐標(biāo)系。

圖2 雷達(dá)圖像與紋理圖像的位置關(guān)系
圖2中所標(biāo)識的各參數(shù)的具體含義如下:DrawWidth:紋理圖像的寬度;DrawHeight:紋理圖像的長度;ImageWidth:雷達(dá)圖像的寬度(包括縮放比例);ImageHeight:雷達(dá)圖像的高度(包括縮放比例);RegionLU.x:雷達(dá)圖像左上角頂點(diǎn)的x坐標(biāo)(DrawX-DrawY坐標(biāo)系);RegionLU.y:雷達(dá)圖像左上角頂點(diǎn)的y坐標(biāo)(DrawX-DrawY坐標(biāo)系);sx:需要顯示的雷達(dá)圖像起始位置的x坐標(biāo)(ImageX-ImageY坐標(biāo)系,且顯示圖像與紋理圖像有交集,否則取默認(rèn)值0);sy:需要顯示的雷達(dá)圖像起始位置的y坐標(biāo)(ImageX-ImageY坐標(biāo)系,且顯示圖像與紋理圖像有交集,否則取默認(rèn)值0); sw:需要顯示的雷達(dá)圖像的寬度; sh:需要顯示的雷達(dá)圖像的高度; x:雷達(dá)圖像左上角頂點(diǎn)的x坐標(biāo)(DrawX-DrawY坐標(biāo)系,顯示圖像與紋理圖像有交集,否則為默認(rèn)值0); y:雷達(dá)圖像左上角頂點(diǎn)的y坐標(biāo)(DrawX-DrawY坐標(biāo)系, 顯示圖像與紋理圖像有交集,否則為默認(rèn)值0)。
圖3列出了在寬度維度下,雷達(dá)圖像與紋理圖像的6種位置關(guān)系,每種位置關(guān)系都對應(yīng)了不同的雷達(dá)圖像數(shù)據(jù)的起始位置。

圖3 雷達(dá)圖像顯示畫面
具體算法如下:
(1) RegionLU.x<0且RegionLU.x+ImageWidth<0時(shí),sx=0,sw=0,x=0;
(2) RegionLU.x<0且0 (3) RegionLU.x>0且0 (4) RegionLU.x<0且RegionLU.x+ImageWidth>DrawWidth時(shí),sx=RegionLU.x,sw=DrawWidth,x=0; (5) RegionLU.x>0且RegionLU.x+ImageWidth>DrawWidth時(shí),sx=0,sw=DrawWidth-RegionLU.x,x=RegionLU.x; (6) RegionLU.x >DrawWidth時(shí),sx=0,sw=0,x=0。 同理,在長度維度下,雷達(dá)圖像與紋理圖像也有6種位置關(guān)系,可分別得出不同位置關(guān)系下的sy,sh,h。 上述雷達(dá)圖像顯示算法已在某合成孔徑雷達(dá)中得到應(yīng)用。程序運(yùn)行在Intel(R) Core(TM)i5-3470 CPU上,主頻3.20 GHz,集成顯卡Intel(R)HD Graphics 2500。圖3是雷達(dá)圖像的顯示畫面,可實(shí)現(xiàn)圖像漫游、放大、縮小,并且畫面清晰平滑,顯示流暢,滿足雷達(dá)圖像顯示的需求。 本文在OpenGL紋理映射機(jī)制的基礎(chǔ)上,針對雷達(dá)圖像的特殊情況,提出了一種雷達(dá)圖像顯示算法。該算法采用實(shí)時(shí)讀取雷達(dá)圖像數(shù)據(jù)的算法,有效地提高了雷達(dá)圖像顯示的速度,保證了圖像顯示的時(shí)效性,能滿足大多數(shù)雷達(dá)圖像顯示的要求,可以廣泛用于陸海空軍事作戰(zhàn)顯示系統(tǒng)中。 [1] SHREINER D.OpenGL編程指南[M].李軍,徐波譯.北京:機(jī)械工業(yè)出版社,2013. [2] 丘文姬,陳哲亮,陳維斌.基于OpenGL技術(shù)的集裝箱仿真系統(tǒng)的研究與開發(fā)[J].計(jì)算機(jī)工程與設(shè)計(jì),2009,30(22):5144-5146. [3] 朱小強(qiáng),謝明紅,葉麗,揚(yáng)殿龍.基于VC的紋理貼圖技術(shù)[J].微計(jì)算機(jī)應(yīng)用,2008,29(4):83-84. [4] 陳應(yīng)松,胡漢春,肖世德.基于OpenGL紋理映射技術(shù)實(shí)現(xiàn)動態(tài)圖像的應(yīng)用[J].計(jì)算機(jī)仿真,2004,21(5):130-131. [5] 姬建偉.GPU中紋理映射的研究與設(shè)計(jì)[M].西安:西安郵電學(xué)院,2011. Research into Radar Image Display Technology Based on OpenGL Texture Mapping LI Shuai,CUI Rong-hua (1.No.38 Research Institute of CETC,Hefei 230088,China;2.Key Laboratory of Aperture Array and Space Application,Hefei 230088,China;3.Key Laboratory of Intelligent Information Processing,Hefei 230088,China) Aiming at the features of radar image display,this paper presents a radar image display algorithm based on OpenGL texture mapping mechanism,gives the detailed steps of texture mapping mechanism,expatiates the algorithm and realization flow of radar image display.The display algorithm can satisfy the requirements of present radar image display,and has good universality. OpenGL;texture mapping;image display 2016-06-06 TN957 A CN32-1413(2016)06-0036-03 10.16426/j.cnki.jcdzdk.2016.06.0073 應(yīng)用實(shí)例
4 結(jié)束語