文档库 最新最全的文档下载
当前位置:文档库 › 雷达模拟器中目标建模与航迹编辑的软件实现

雷达模拟器中目标建模与航迹编辑的软件实现

雷达模拟器中目标建模与航迹编辑的软件实现

Software Implementation of Objectives’Modeling and FlightPath Edit

in Radar Simulator

张宇飞 王展 周良柱

摘 要:介绍了在Windows9x/NT环境下,通过Delphi调用OpenGL图形库中的函数,实现雷达模拟器软件设计中两个关键技术目标建模和航迹编辑的方法。

关键词:OpenGL 目标航迹 三维模型

Abstract:This paper introduces the method of objectives’ modeling and flightpath edit ,which are the two key techniques of radar simulator software design, by Delphi calling the functions in OpenGL under the environment of Window9x/NT.

key words:OpenGL ; Objectives’flightpath ; Three dimentional model

1 引言

我们开发的雷达模拟器用于为被测试雷达生成由多个起伏目标和非均匀杂波所组成的

雷达环境,并逼真地复现雷达系统的中频与视频信号,以检验雷达在多目标环境下对目标的

发现、跟踪、建航等能力,其系统结构主要由终端系统、中频信号支路、中频多路径反射信

号支路、杂波信号支路、视频信号支路、视频多路径反射信号支路、定时支路等几个部分组成。其中终端系统包括上位机、嵌入式控制计算机和PCI数据传输接口。整个系统设计分

为软件设计和硬件设计两个部分。终端软件设计采用模块式系统结构,包括上位机软件系统

和嵌入式计算机软件系统。上位机提供人机交互界面,由操作员完成200批匀速或匀加速目

标的航迹编辑,雷达工作制式、杂波形式、目标反射截面积等参数的设置,并将航迹数据和

设置的参数下传给嵌入式计算机,最终动态显示目标飞行情况。嵌入式计算机系统主要完成

航迹的计算和需生成的中频、视频目标的各项参数计算。本文所要论述的是上位机界面设计

中的两个关键技术:目标的三维建模以及多个起伏目标的航迹编辑。

2 开发工具及OpenGL简介

上位机软件系统在Windows9x/NT平台上进行开发,开发采用面向对象(Object-oriented)的编程技术,以Delphi为基础,调用OpenGL图形库中的函数完成程序设计。

OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,在交互式三维

图形建模能力和编程方面具有无可比拟的优越性,可灵活方便地实现二维和三维的高级图形

技术。OpenGL以往都是在C语言环境下进行编程的,上位机软件设计之所以考虑在Delphi

环境下编写,主要是因为C语言开发方法复杂且开发周期长,不适应当前快速开发应用程

序的需求。

3 雷达目标的三维建模

在使用OpenGL前首先应进行初始化工作,这些工作主要包括:设置象素格式——主要

完成OpenGL的绘制风格、颜色模式、深度位数等重要信息的设定,创建设备描述表和着色

描述表——告诉Windows怎样在一个窗口中显示信息。初始化工作为后续的模型建立做好

了准备。

创建三维物体首先是在三维空间建立物体的模型,然后计算机经过几何变换、投影变换、

剪切变换、视口变换等得到理想的视觉效果,最后在二维平面上显示出来,算法上是通过线性变换和矩阵运算实现的。

传统的三维物体建模通常是通过3DMAX等软件先建立模型,再通过数据格式转换,导出数据文件,最后由OpenGL绘制,这种方法虽然能生成较为逼真的模型,但是数据量很大,由于本套系统不要求很复杂的目标形状所以在建模时采用了简单化处理。目标模型设定为飞机,在绘制飞机的函数DrawPlane里首先调用OpenGL实用库中的gluNewQuadric( )命令建立一个二次曲面对象,再调用三次gluCylinder(GLuquadricObj *obj, GLdouble baseRadius, GLdouble topRadius, GLdouble height, GLint slices, GLint stacks)命令绘制三个圆柱体,其中变量的具体含义如下

obj 二次曲面对象

baseRadiu 指定所绘制圆柱的底半径

topRadius 指定圆柱的上表面半径

height 指定圆柱的高

slices 指定围绕z轴的子分割的因数

stacks 指定沿z轴的子分割的因数

三个圆柱体的区别在于第一个圆柱体的上表面半径为0,第二个圆柱体的上下半径相同,第三个圆柱体的上表面半径略大于底半径。三个圆柱体分别用于模拟机头、机身和机尾,通过OpenGL中的平移命令glTranslatef * ( )将三个圆柱体变换到合适位置,此时飞机的主要部分就完成了。飞机的侧翼和尾翼是用OpenGL中多边形的绘制来完成的,在圆柱体的合适位置指定多边形的顶点,调用如下绘制命令即可

glBegin(GL_POLYGON);

glVertex3f(x1,y1,z1);//多边形的顶点坐标

glVertex3f(x2,y2,z2);

glEnd;

最后加入光照,飞机模型就建立好了。图2、图3和图4分别给出了按上述方法建立的飞机模型的俯视图、侧视图和有一定角度的旋转图。

图2 俯视图图3 侧视图图4 旋转图

4 航迹编辑

航迹的编辑在实际空间中进行,采用右手直角坐标系,此时雷达处于直角坐标系的原点,X—Y平面表示水平面,Z表示高度,对航迹采用分段编辑的方法。一条航迹可分成多段,每段内采用直线的运动形式,对于复杂运动形式(如近似圆周运动)的编辑可采用多段直线拟合的方法。三维空间航迹的编辑采用三个二维平面投影合成的方法来实现,即首先在X —Y平面(俯视图)上分段编辑一条航迹,再在X—Z平面(前视图)和Y—Z平面(右视图)为该航迹的每个分段点给出一个高度值,通过对三条二维曲线的合成就可以得到三维空间中的一条航迹。之所以采用三个投影面,是为了解决航迹落在Y轴或X轴上这种特殊情况下的编辑问题。如果没有这种特殊情况存在,那么只需在两个投影面内编辑即可。

本套系统最多可编辑200条航迹,每条航迹上最多50个航迹点。定义一个200行150列的数组FlightPath,数组的每一行代表一条航迹,一行上的每三列代表一个航迹点,分别存放该点的X、Y、Z坐标值,同时定义一个200列的一维数组PointNumbers,用于存放每条航迹上航迹点的总数,程序代码如下

var

FlightPath:array[1..200,1..150] of Glfloat;

PointNumbers:array[1..200] of Glint;

航迹的绘制在Delphi的面板上进行,根据实际情况将面板的背景颜色分别清为两种不同颜色,俯视图时为土黄色,前视图时为淡蓝色,分别用于模拟地面和天空,两图之间的切换用一标志位DownFlag,加以控制,此标志为真时是俯视图,否则为前视图。代码如下

if DownFlag then glClearColor(0.8,0.6,0.4,1.0)

else glClearColor(0.4,0.4,1.0,1.0);

glClear(GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT );

设置一个用于编辑航迹的按键,每按下一次标志位PathNumber加1表示新增一条航迹。每条航迹的绘制过程如下:

(1)在面板鼠标按下事件里记录当前鼠标位置。

(2)在面板的双击事件里给FlightPath数组付值,用以记录航迹上各点的坐标值。

先将获得的鼠标当前位置值转换成OpenGL坐标,转换公式如下

Point_x:=2*Mouse_x/Panel1.Width-1; //航迹点的X坐标

Point_y:=1-2*Mouse_y/Panel1.Height; //航迹点的Y坐标

Point_z:=1-2*Mouse_z/Panel1.Height; //航迹点的Z坐标

再将转换后的坐标付给数组FlightPath的相应位置,并把数组PointNumbers中该条航迹的航迹点数加1。

(3)在绘制航迹的函数DrawFlightPath里绘制航迹

先调用如下OpenGL函数

glEnable(GL_POINT_SMOOTH); //平滑处理

glEnable(GL_BLEND);

glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA);

glHint(GL_POINT_SMOOTH_HINT,GL_DONT_CARE);

glPointSize(5.0); //设置点的大小

glColor3f(0.0,1.0,1.0); //设置点的颜色

进行点的平滑处理以及尺寸与颜色的设置,再用FlightPath中航迹点的坐标值循环调用OpenGL画点函数

glBegin(GL_POINTS);

glVertex3f(X,Y,Z);

glEnd;

绘制航迹点。如果该条航迹的航迹点数大于1,则循环调用OpenGL画线函数 glBegin(GL_LINES);

glVertex3f(X1,Y1,Z1); //前一个点的坐标值

glVertex3f(X2,Y2,Z2); //后一个点的坐标值

glEnd;

在前一点和后一点之间画线。

(4)最后在绘制场景的函数DrawScene中调用DrawPlane和DrawFlightPath函数进行目标与航迹的显示。由于OpenGL支持双缓存技术,在进行图形显示时,需调用SwapBuffers函

数,将后台缓存绘制的图形调入前台缓存,在屏幕上显示。图5和图6分别给出了一条航迹

的俯视图和前视图的编辑结果。

图5 俯视图图6 前视图

从图中可以看出这条航迹由4段,5个航迹点组成,俯视图中给出了5个航迹点的X、Y坐

标,前视图中给出了5个航迹点的X、Z坐标,因为航迹没有落在Y轴的特殊情况,所以经

过图5和图6两个过程整条航迹在三维空间的位置就可以确定下来了。

5 结束语

以上为雷达模拟器中目标三维建模以及航迹编辑的软件实现方法,该方法较好地完成了

多个目标的航迹编辑和目标模型的建立工作,达到了逼真、形象的演示效果。

参考文献

1向世明.OpenGL编程与实例.电子工业出版社.1999

2王辉等译.Delphi 5从如门到精通.电子工业出版社.2000

3史义霞,耿俊梅.Delphi多媒体特效制作百例.中国电力出版社.2001

2米切尔.雷达系统模拟.科学出版社.1982

作者简介:张宇飞 女 1975出生 汉族 硕士研究生 国防科学技术大学电子科学

与工程学院信号与信息处理专业

通信地址:长沙国防科大四院五队 410073

联系电话:136********

E_mail :yufeiz@https://www.wendangku.net/doc/024598950.html,

相关文档