关于Direct3D和着色器编程就不再赘述,下面介绍雷达显示系统模拟中的一些关键技术。
2 雷达图像分层与纹理混合
雷达显示器图像根据其产生的方法和特点可分为两种:一种是来自接收机输出的回波图像(其中也包括噪声),其特点包括:图像随天线转动边扫描边刷新,像素的绘制基于极坐标系;图像亮度随时间衰减,即具有余辉效果。另一种是来自信息处理系统的ARPA符号,如动标、点目标符号、目标航迹线等,其特点是:符号的变化随ARPA信息变化,且无余辉效果。
为了避免全屏像素存取,必须将回波图像刷新、余辉效果仿真、ARPA符号绘制与最终的图像合成隔离。可编程渲染管线的像素着色器能够在显卡内利用进行多重纹理的自由混合。由于在图像合成被独立了出来,CPu仅完成必要的绘制即可。如图2所示,将合成雷达图像的纹理分为3层:回波图像层、余辉效果层和ARPA符号层,前2个纹理在帧间隔内进行刷新,后一个纹理仅在ARPA信息发生变化时进行绘制。这些任务都由CPU来完成。
GPU负责纹理的合成。渲染雷达显示器时,这3层纹理在像素着色器中进行混合,产生最终的雷达图像。混合代码如下:
此外利用像素着色器,还非常容易实现亮度控制、颜色反转等特殊显示效果。由于CPU和GPU可并行处理,代码的执行效率非常高。
3 雷达回波图像更新与直接像素存取
帧间隔内更新回波图像,就是利用接收机输出的脉冲序列来更新回波图像纹理中的扫描扇面区。脉冲序列存放在回波缓存区数组内。由于脉冲幅值与像素颜色数据格式不同、缓存区数组与像素矩阵维度不同,不能用直接位块传送(Blt)来绘制回波图像。需要绘制单个像素来更新。Direct3D通过IDirect3DTexture9::LockRect()方法锁定纹理上的一块矩形区域,该矩形区域被映射成类似于DIB/DDB的像素数组。利用函数返回的指针,可以对数组中的像素进行直接存取。通过纹理锁定来存取显存,能够达到GDI函数无法达到的高性能。
锁定的矩形区越大,则存取的次数就越多。在锁定前根据扫描区域首先计算需要锁定的矩形范围,便可大幅减少存取像素的数量。这也正是雷达图像分层所带来的好处。如图3所示,A中需要对全屏像素进行存取,而B中只需要访问扫描扇面包围矩形中的像素。在进行像素存取时,采用查表法实现直角坐标与极坐标的转换,还能进一步提高存取的效率。