APP下载

基于国产化平台的雷达回波视频软件绘制研究

2020-12-25李华君

雷达与对抗 2020年2期
关键词:方位纹理顶点

李华君,张 超,陈 婧,林 悦

(中国船舶集团有限公司第八研究院,南京 211153)

0 引 言

现代雷达需要显示的信息量庞大[1],对数据处理的实时性要求较高,雷达的显控终端的设计显得尤为重要。[2]在非国产化平台下,显控终端对雷达回波、尾迹衰减效果的显示实现主要有以下几种方法:(1)基于专用图形卡+软件绘制叠加的软硬件结合方法;(2)采用CPU+GPU的联合渲染的方法;(3)利用CPU资源和软件技术结合(如MFC框架下GDI或D3D绘制等)的方法。以上方法或不支持国产平台,或不适配国产操作系统,或造成大量的系统资源占用。[3]而采用硬件板卡的方式,设备成本及维护费用大。[4]针对雷达软件化和国产化的迫切需求,开展基于国产化有限资源环境下的回波视频软件绘制研究势在必行。

本文提出了一种结合QT图形化视图框架特性,基于图元分层及OpenGL绘制回波视频的雷达综合态势显示软件实现方法;在显示图层中实现回波视频及其尾迹衰减效果的显示控制,并结合其他图层完成综合态势集成显示,通过实验验证了方法的可行性;采用QT和OpenGL结合的方法,为开发者提供高效解决方法,并支持跨平台移植应用;利用OpenGL着色语言(OpenGLShadingLanguage,GLSL)编程将数据计算和图形渲染放在GPU进行,有效平衡了系统开销。

1 OpenGL技术原理

1.1 OpenGL

OpenGL是图形硬件的一个软件接口,也是该领域的工业标准。OpenGL是一个与硬件无关的软件接口,可支持不同的系统,如Windows系统、Unix、Linux、MacOS、OS/2及主流国产操作系统。因此,基于OpenGL的软件移植性好,应用广泛。

1.2 GLSL和可编程渲染管线

GLSL是一种类似于C/C++的高级语言。使用GLSL语言编写自定义的着色器有利于开发者移植和实现所需的特效效果。

最新的OpenGL标准中定义了3个可编程图形处理器,即“顶点着色器”(Vertex Shader),“几何着色器”(Geometry Shader)和“片段着色器”(Fragment Shader)。图形管线渲染流程的每个阶段抽象展示如图1所示,其中背景部分代表的是可以注入自定义的着色器的部分。

图1 管线渲染流程

自定义的顶点着色器会替换固定管线中所有的关于顶点的运算,包括顶点和法线变换、纹理坐标生成和变换、光照以及材质应用这些传统的管线命令。自定义的几何着色器会替换固定管线中所有关于图元操作,包括剪裁、增加和改变图元的工作。自定义的片段着色器会替换固定管线中所有关于片段的运算,包括代纹理应用、雾化和像素汇总的工作。

1.3 纹 理

纹理是一种结构化的存储形式。除了常见的二维纹理以外,也存在一维、三维或者多个纹理叠加后形成的单一对象。纹理是由纹素组成。除了用于储存图像数据,它也可以被用来储存大量的数据,如地形数据、视频数据等。这些纹理数据可以发送给着色器。着色器使用纹理采样器来快速寻址并采样。纹理中的数据可以被GPU直接读取并进行渲染,可节省大量的内存空间。

2 QT图形化视图框架

雷达综合态势显示软件结合QT图形化视图框架特性实现,采用的GraphicsView框架如图2所示。

GraphicsView是一个基于图元的Model/View架构的框架,能对大量图元进行管理,并提供碰撞检测、坐标变换和图元组等多种方便的功能。软件将OpenGL绘制、二次目标、坐标轴辅助线和开窗起始区域绘制等使用QGraphicsItem包装,按照一定的层叠顺序放入一个Graphics Scene进行管理。图元的层叠顺序由下而上依次是:

图2 雷达综合态势显示分层架构

(1) OpenGL图层:完成回波视频的绘制,用OpenGL的FBO和顶点、片段着色器特性实现了雷达尾迹衰减效果,封装为GLLayerItem图元。

(2) 坐标系图层:实现方位刻度、距标环和方位线等信息绘制功能,封装为CoordsLayerItem图元。

(3) 图形绘制图层:实现自定义绘图、电子海图、开窗区域、自动起始区域等绘制功能,封装为GraphLayerItem图元。

(4) 目标图层:实现目标信息管理、目标轨迹管理等绘制功能,封装为TargetLayerItem图元。

(5) 扫描线图层:实现对扫描线消隐及其尾迹衰减、消隐的绘制与控制,封装为ScanLineLayerItem图元。

为了在GraphicsView框架中利用OpenGL的特性进行图形渲染,需要设置一个新的QGLWidget作为QGraphicsView的视口。如果需要OpenGL提供反锯齿功能,则需要引入OpenGL采样缓冲支持,其中回波视频的绘制工作主要在GLLayerItem图元中完成。为了在GLLayerItem图元中进行自定义的OpenGL绘制,需要重写图元的虚函数GLLayerItem::paint(),并在beginNativePaint()和endNativePainting()两个函数之间进行相关的OpenGL绘制操作。

3 回波视频绘制方法

3.1 扫描线尾迹衰减绘制

如图3所示,根据天线实时角度提交一组顶点数据(V1,V2,V3)绘制扇形区域。利用GLSL计算片元颜色,实现扫描线渐变效果。

图3 扫描线尾迹衰减绘制示意图

(1) 绘制圆心角为θ扇形区域。OpenGL没有提供直接绘制圆形或扇形方法。按照极限思维的方式,可以将扇形区域分割成n个圆心角为θ/n的扇形,分割数量n越多,圆心角为θ/n度数越小,因此可以把圆形或扇形区域认为由多个等腰三角形组成。

(2) 计算根据扇形区域顶点所在角度与扫描线的角度偏差值,设置线性混合系数,如图4所示。在片段着色器中利用GLSL内置函数atan()、degrees()等计算扇形区域顶点所在的方位角度angle。根据方位角度angle与天线方位antennaAzi的差值diff设置线性混合系数a。调用内置函数mix(antennaColor,blackColor,a)实现颜色antennaColor、blackColor的线性混叠,实现颜色渐变。整个过程顶点方位计算在GPU端进行,每次绘制只需要从提交一组顶点数据至GPU即可。

图4 实现颜色混合的片段着色器

3.2 视频绘制

用OpenGL的FBO、纹理和顶点和片段着色器特性实现了回波视屏的绘制和尾迹衰减效果。textureA用于存储当前需要更新扇形区域的视频数据,textureB用于存储当前和历史视频(包括尾迹衰减)的所有视频数据。

(1) 视频数据的解算与周期内视频绘制

雷达回波视频数据存储一个方位Azin上距离由近及远所有点的幅度值Anm,点之间距离约为30 m,方位上数据格式为。而OpenGL顶点坐标是以直角坐标表示,目标位置在理论上一般要将极坐标转换成直角坐标,并根据幅度值计算出RGB值。公式(1)用来计算每个点的顶点坐标,其中Azin表示当前视频数据的方位。公式(2)用来计算每个点RGB值,其中Anm表示方位Azin中第m个点的幅度值,Amax表示幅度的最大值。

v=

(1)

c=<0,Anm/Amax,0>

(2)

雷达综合态势显示软件通过定时器来触发视频的刷新,时间周期(刷新率)根据需求给定。如图5所示,时间周期内收到方位Azii至方位Azij(0<=i,j<=n)的视频数据经过坐标和幅度的计算转化为OpenGL坐标系下的顶点坐标值、顶点RGB值后用顶点数组提交给GPU绘制,并渲染到textureA。

图5 方位区间内视频纹理绘制

(2) 使用着色器纹理采样

使用着色器对textureB方位Azii至方位Azij(0<=i,j<=n)区域内颜色进行衰减。如图6所示,利用片段着色器中的内值函数计算textureB纹理坐标所在的方位角度angle。如果属于要更新的区域,则用GLSL内置函数texture2D (textureB,textBCoord)进行textureB纹理采样,将采样值与衰减系数相乘,实现颜色的衰减。如图7所示。

图6 实现颜色衰减的片段着色器

(3) 帧缓冲对象进行纹理叠加

FBO用于数据渲染到纹理对象,使用FBO技术会更高效且易于实现。如图8所示,利用FBO将textureA叠加在textureB上渲染成新的纹理textureB’,无glEnable()和glBendFunc()显示glCopyTexImage。最后将叠加更新后的textureB’绘制到当前屏幕缓存实现最终的显示效果。

图7 方位区间内纹理颜色衰减

图8 纹理的叠加

另外,通过glEnable()和glBendFunc()函数开启OpenGL 的混色功能也是必需的步骤。混色函数选取宏定义GL_SRC_ALPHA 即ALPHA通道的颜色做混色源因子,并将宏定义GL_ONE_MINUS_SRC_ALPHA即(1-ALPHA通道颜色值)作为目标因子。

4 实验结果

实验使用的回波视频数据分为4 096个方位。每个方位上记录约1万点的幅度值。每个方位数据发送间隔为1 ms。视频数据通过网络传输至雷达态势显示软件,并采用本文介绍的方法进行绘制。

雷达态势显示软件的开发运行环境为QT 4.8.3、银河麒麟操作系统、飞腾FT1500A处理器、AMD 嵌入式RadeonTME8860显卡。视频刷新间隔为20 ms,视频尾迹衰减系数为0.5。软件运行效果如图9、图10及图11所示。此方法实现的雷达回波视频及其尾迹衰减效果理想,占用CPU资源低,回波视频绘制执行时间小于1 ms,整体运行流畅无卡顿。

雷达回波视频数据实时性强,数据量大,国产化平台CPU处理能力有限。本文用OpenGL的FBO和顶点、片段着色器特性实现雷达视频和扫描线的绘制及尾迹衰减效果。方法有以下特点:

(1) 应用Qt Graphics View框架和OpenGL特性实现的雷达回波视频绘制为开发者提供高效便捷的方法,提高了雷达态势显示软件稳定性、可靠性和实用性。由于Qt及OpenGL移植性强,使得软件可在国产化平台下运行,具有更加广泛应用前景。

图9 回波视频及其尾迹绘制效果

图10 视频尾迹衰减效果

图11 态势显示叠加效果

(2) 利用OpenGL可编程渲染管线特性,编写顶点着色器进行了矩阵变换和数据传递,编写片段着色器进行了数据换算、颜色混合和纹理采样,最终实现了扫描线、回波视频绘制及其尾迹衰减效果,从而将复杂运算和绘图产生的负载从CPU转移到GPU上,发挥了GPU并行处理的优势,有效平衡系统开销。此方法不仅简化了渲染管线的逻辑,而且提高了渲染效率,亦有效解决国产处理器的性能瓶颈。

(3) 通过OpenGL 的Alpha 通道混色功能设置源纹理和目标纹理的混合因子后,采用帧缓冲对象(FBO)对源纹理和目标纹理进行了叠加,从而提升了渲染效率和稳定性,进一步提升基于国产化平台的软件实现可行性。

5 结束语

本文采用的方法对传统机械扫描雷达的回波视频数据绘制已通过实验得到验证。对于电子扫描阵列雷达,因雷达回波数据更新特性有差异,视频软件化绘制方法有待进一步展开研究。

猜你喜欢

方位纹理顶点
肺纹理增多是病吗?
童梦
加强学习补差距
TEXTURE ON TEXTURE质地上的纹理
消除凹凸纹理有妙招!
Word Fun
删繁就简三秋树
数学问答
练思维:看图学方位
方位介词