APP下载

毫米波防撞雷达三维显示界面的设计与实现

2011-03-05靳碧鹏

电讯技术 2011年6期
关键词:方块分块障碍物

靳碧鹏

(中国西南电子技术研究所,成都 610036)

1 引 言

毫米波防撞雷达是针对直升机在恶劣气候条件下低空飞行时,无法清晰判断前方危险障碍物,进而影响飞机飞行安全的情况而设计的。这种障碍物防撞功能,要求雷达终端显示界面能够非常直观、准确地显示障碍物目标,以方便飞行员及时作出反应。目前,国内雷达的终端显示都是以二维方式为主,主要有PPI显示、B型显示、C型显示3种,但都有各自的缺陷:PPI显示方式以极坐标的形式显示目标的距离和方位,B型显示以直角坐标的形式显示目标的距离和方位,两种方式都无法直观地表示目标高度;C型显示方式能够清晰地显示目标的高度,却无法直观地显示目标的距离。在毫米波防撞雷达中,我们提出采用3D(三维)方式显示雷达目标,这种方式不仅可以直观地显示目标的三维位置,还能真实地再现扫描空域内的实际场景。然而,这种方式在具体实现时,却面临一些问题:由于嵌入式图像处理板的硬件限制,图像绘制速度慢,无法达到系统的实时性要求;由于绘制效率的原因,无法考虑地形真实感方面的问题,形成的地形场景单一,无法反映不同高度的地貌特征,或者没有添加阴影效果,绘制的地形立体感不强。在这种背景下,本文提出了地形分块加速绘制算法,以及随机纹理与顶点颜色相融合的地形着色方法。

2 地形分块加速算法

本文算法是一种规则网格地形绘制算法。目前基于规则网格的地形绘制算法在实际中应用较多的包括实时连续细节层次绘制(基于四叉树结构LOD)[1]、实时的最优自适应网格(ROAM)[2]、基于GeoMipMap的绘制[3]、嵌套网格算法[4]。

本文设计的地形分块加速绘制算法源自基于四叉树结构的LOD算法思想,将地形分块,不同块采用不同的细节描绘。不同的是,LOD算法是自顶向下递归细分地形,从而建立多分辨率的地形层次模型;本文算法仅仅是建立两层分辨率的地形模型,其过程是:首先将地形分成若干个大小相同的方块(除边界方块外),然后利用一定的准则判断本次分块是否合理,如果不合理,将地形进一步细分为更多的方块(地形块个数是上一次的2倍),如此递归,直到找出满足算法准则的分块方式。这种分块算法相比较四叉树结构的LOD算法实现更为简单,而且每次地形数据发生变化时,地形分块和地形渲染完全分离,大大提高了绘制速度。另外,本算法不需要满足四叉树结构LOD算法中顶点个数必须为2n×2n的条件,适应于任意顶点个数的地形绘制。

2.1 分块算法描述

假设地形顶点的个数为M×N,分块后每个地形方块包含K行、K列个地形顶点。第一次分块时,设置K等于M、N的最大公约数,那么地形被等分为 m×n个方块,其中,m=Round(M/K),n=Round(N/K)。

(1)设置 m×n个方块的信息,存储到数组Quad[m][n]中。地形方块的信息结构体定义如下:

其中,f Ratio=C/K×K,C为地形方块中表示障碍物的顶点(顶点高度大于地面高度)个数,f Ratio表示了地形方块中障碍物顶点所占的比例。

(2)遍历数组Quad[m][n]中的每个Quad[i][j],统计属性 fRatio=0的方块个数Q,计算其所占的比例a:

式中,a代表所有方块中无障碍物目标的方块所占的比例,如果a较大,说明划分后无障碍物目标的方块占的比例比较多,绘制时可以采用较少的细节描绘;如果a较小,说明无障碍物目标的方块数目占的比例较少,需要继续细分方块,降低细节层次。

计算属性f Ratio≠0时,fRatio的平均值s:

式中,s代表障碍物顶点在方块中所占的平均比例,如果s较大,说明方块中分布了较密集的障碍物顶点,无法再细分;如果 s较小,说明方块中障碍物顶点分布非常稀疏,还可以继续细分,分离出无障碍物目标的方块。

(3)依据a、s的值判断此次分块是否为最优分块。在试验中,我们寻找的最佳经验值为:如果a<0.4,或者a≥0.4并且s<0.2时,需要继续细分地形,此时设置K=K/2,依据顶点个数K重新划分地形,生成m×n个地形方块,转到步骤1进行新一轮的判断。

(4)如果不满足步骤3的条件或者K=1时,说明此次分块是最优分块或者无法再细分,则停止分块。

2.2 网格渲染与裂缝修补

地形合理分块后,以块为单位绘制所有地形块。绘制时,判断地形方块的属性 fRatio的值,如果fRatio=0,说明地形块中没有障碍物目标,只需要采用较少的细节描绘,只需绘制方块的4个顶点构成的两个三角形面,如图 1中的C2、C3,图中圆形顶点为地形顶点;如果 fRatio≠0,说明地形块中有障碍物,需要保持地形的细节,因此需要绘制方块内所有顶点构成的三角形面,如图2中的C1,三角形个数较 C2、C3的多。

图1 地形分块渲染示意图Fig.1 Quad rendering in terrain

图2 补画裂缝示意图Fig.2 Four cases of mending a crack between quads

可以看出,分块加速绘制算法的核心是尽量分离出不包含障碍物目标的地形方块,以减少绘制的三角形个数,提高绘制速度。

但是,由于一个顶点只属于一个地形块,以块为单位绘制地形,相邻两个方块之间会出现裂缝。为了消除裂缝,每个方块绘制结束后,必须补画它与右边相邻方块、上边相邻方块之间的裂缝。补画裂缝时,判断相邻两个方块的属性fRatio是否都为0,如果是,绘制两个方块之间相邻的4个顶点构成的两个三角形,如图2(a)演示了C1与右边相邻方块C2补画裂缝的三角形面,图2(c)演示了C1与上边相邻方块C2补画裂缝的三角形面;如果有一个方块的属性fRatio≠0,那么绘制相邻两行或者两列上所有顶点构成的三角形,如图2(b)、(d)所示,此时的三角形个数较多。

3 快速地形着色方法

在显示界面中,不但要表现地形的真实感,而且需要突出表现地形的高度层次,以提示障碍物的危险级别。多纹理混合绘制算法[5]能够较好地反映地形的层次感和立体感,但是,这种算法在每次地形数据变化时,都需要重新将多种纹理混合成一张与地形匹配的纹理图像,CPU占用时间长,系统实时性差。本文提出了利用Diamond-Square算法[6]生成带有随机阴影的纹理图模拟地形表面凹凸不平的细节,再混合多种颜色表现地形的高度层次,这种混合着色的方法占用内存少,处理速度快,能够很好地满足系统的实时性要求。

3.1 利用Diamond-Square算法生成纹理

(1)首先利用Diamond-Square算法生成地形的高程数据,算法描述如下:

1)初始化二维数组n×n(n=2m+1),并将4个角设为相同高度。图3以一个5×5的数组为例,其中4个角放入初始高度值,用圆点表示,此为递归细化过程的起点;

2)Diamond步:取5×5正方形的4个点构成的正方形,用二维随机中点位移法为其对角线交点生成一个随机高度值,作为此点的高度值,如图3(b)所示;

3)将5×5正方形细分成4个3×3正方形,如图3(c)所示;

4)Square步:取3×3正方形的棱锥中心和4个顶点的平均值,再加上一个与Diamond步相同的随机位移,可以计算出每条边的中心值,在计算位于边界上的点时,选用正方形另外一条边附近的对称点作为求平均值的点;

5)对上述过程进行迭代,直至达到所有的细分网格点被填充为止。

图3 Diamond-Square算法Fig.3 The step of Diamond-Square algorithm

(2)将算法生成的高程数据绘制为三维地形,打开光照,增加阴影效果。

(3)读取帧缓存中的图像数据,此时,图像为真彩色图像,将其转化为灰度图,转换公式为

其中,nRed、nGreen、nBlue分别代表红色分量、绿色分量、蓝色分量。

(4)将灰度图载入地形纹理内存,供纹理映射使用。

3.2 生成地形的颜色信息

对于某一个地形顶点Vi,设置颜色的过程如下。

(1)找出地形网格中与顶点 Vi有边连接的6个顶点,比较7个顶点的高度,找出其中的最大高度值H,如图4所示,中间的方形顶点是顶点Vi,圆形顶点是与顶点Vi有边连接的6个顶点。

图4 相邻顶点示意图Fig.4 The neighbor vertex connect with a certain vertex

(2)依据高度 H的大小,设置顶点 Vi的颜色,分以下几种情况:如果H等于地面高度,顶点Vi的颜色为绿色,代表草地;如果H低于载机高度,顶点Vi的颜色为灰白色,代表一般障碍物;如果H高于载机高度,顶点Vi的颜色为黄色,代表危险地形。

渲染地形时,设置纹理映射方式为混合模式,为每个地形顶点指定纹理坐标和RGB颜色,混合渲染后的地形不但立体感强,而且地形层次非常清晰。由于着色方法使用的分形纹理是在初始化时生成的,因此程序在运行过程中只需要维护一组与高程数据相匹配的颜色数据,占用的内存少,计算量小,处理速度快,很好地满足了系统的速度要求。图5显示了利用雷达数据生成的三维地形效果图。

图5 地形渲染效果图Fig.5 The terrain rendered by coloredmethod

4 场景漫游

系统中,每隔一帧产生一组新的地形数据,为了反映载机在真实场景中的飞行,场景视点的位置在一帧的时间间隔内需随载机速度移动,当新一帧的地形数据产生时,场景视点返回零点,然后重新开始随载机速度向前移动,直到新的地形数据再次产生。

视点在场景中移动的距离按如下公式计算:

式中,D是视点移动的距离,V是载机速度,T是一帧的时间间隔,FACT是三维场景与真实场景之间的缩小比例。

如果仅仅靠移动视点来显示载机的运动,每次帧切换、场景变化、视点返回零点时,视觉上有一种被强行拉回的感觉,这是因为在一帧时间间隔内,视点不断向前移动而地形纹理始终不变引起的。为了帧切换时也能有流畅的漫游效果,地形纹理需要随视点位置的变化而同步移动。软件中,纹理移动通过变换纹理坐标来实现,每次渲染时,累加视点移动的距离,计算其对应到纹理图上的偏移值,将该偏移值添加到每个纹理坐标上。这种纹理与视点同步移动的漫游方法,使得每次地形数据更新,场景交替时的画面非常流畅自然。

5 实验与结论

本文的三维终端显示软件在嵌入式图像处理板上运行,硬件配置为:CPU为Intel Core Duo处理器U2500,频率为1.2 GHz,内存为1 GB,显卡为 Intel945GM chipset,显存为128 MB,采用Visual C++6.0和OpenGL编程。本系统中,三维地形的顶点个数固定为300×400,对于图5所示的地形场景,未使用分块加速算法时,三角形个数为238602个,绘制时间为142 ms;采用分块加速算法后,绘制的三角形个数变为72736个,绘制时间缩短为31 ms。实验证明,本文采用的地形分块算法、着色方法、场景漫游完全满足了防撞雷达系统的性能需求,绘制速度快,场景交替自然流畅,能够真实显示载机飞行前方的地形场景,为飞行员提供直观可靠的信息。另外,本文提出的算法也同样适用于其它背景的三维地形绘制。

[1]Lindstrom P,Koller D,Ribarsky W,et al.Real-time continuous level of detail rendering of height fields[C]//Proceedings of Annual Conference on Computer Graphics Series.New Orleans,LA:ACM,1996:109-118.

[2]Bryan Turner.Real-Time Dynamic Level of Detail Terrain Rendering with ROAM[EB/OL].(2000-04-03)[2006-10-12].http://www.gamasutra.com/features/20000403/turner-01.htm.

[3]de Boer Willem H.Fast Terrain Rendering Using Geometrical Mip-mapping[EB/OL].(2001-02-12)[2006-10-12].http://www.flipcode.com/tutorials/geomipmaps.pdf.

[4]Losasso F,Hoppe H.Geometry Clipmaps:Terrain Rendering Using Nested Regular Grids[J].ACM Transactions onGraphics,2004,23(3):769-776.

[5]黄忠,张佑生.基于约束四叉树的真实感地形绘制[J].合肥工业大学学报,2008,31(6):854-857.HUANG Zhong,ZHANG You-sheng.Realistic rendering of terrain based on restricted quadtree[J].Journal of Hefei University of Technology(Natural Science),2008,31(6):854-857.(in Chinese)

[6]王丽芳.基于随机分形的地形场景的研究[J].山西电子技术,2007(5):15-16.WANG Li-fang.Research of Terrain Scenes Based on Random Fractal[J].Shanxi Electronic Technology,2007(5):15-16.(in Chinese)

猜你喜欢

方块分块障碍物
有多少个方块
钢结构工程分块滑移安装施工方法探讨
不一样的方块桥
谜题方块
高低翻越
分块矩阵在线性代数中的应用
SelTrac®CBTC系统中非通信障碍物的设计和处理
反三角分块矩阵Drazin逆新的表示
基于多分辨率半边的分块LOD模型无缝表达
土钉墙在近障碍物的地下车行通道工程中的应用