基于opengl的多目标航迹编辑与三维建模_第1页
基于opengl的多目标航迹编辑与三维建模_第2页
基于opengl的多目标航迹编辑与三维建模_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

基于opengl的多目标航迹编辑与三维建模

1两大终端系统组成我们开发的雷达模拟器用于为测试雷达生成由多个波形目标和不均匀混合波组成的雷达环境,并真实再现雷达系统的低频和视频信号。以验证雷达在多目标环境下的检测、跟踪、导航和其他能力。系统结构主要由终端系统、低频信号通道、低频信号通道反射信号通道、多波信号通道、视频信号通道、视频多通道反射信号通道、固定波形通道等部分组成。其中终端系统包括上位机、嵌入式控制计算机和PCI数据传输接口。整个系统设计分为软件设计和硬件设计两个部分。终端软件设计采用模块式系统结构,包括上位机软件系统和嵌入式计算机软件系统。上位机提供人机交互界面,由操作员完成200批匀速或匀加速目标的航迹编辑,雷达工作制式、杂波形式、目标反射截面积等参数的设置,并将航迹数据和设置的参数下传给嵌入式计算机,最终动态显示目标飞行情况。嵌入式计算机系统主要完成航迹的计算和需生成的中频、视频目标的各项参数计算。本文所要论述的是上位机界面设计中的两个关键技术:目标的三维建模以及多个起伏目标的航迹编辑。2生成三维图形软件—开发工具及OpenGL简介上位机软件系统在Windows9x/NT平台上进行开发,开发采用面向对象(Object-oriented)的编程技术,以Delphi为基础,调用OpenGL图形库中的函数完成程序设计。OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,在交互式三维图形建模能力和编程方面具有无可比拟的优越性,可灵活方便地实现二维和三维的高级图形技术。OpenGL以往都是在C语言环境下进行编程的,上位机软件设计之所以考虑在Delphi环境下编写,主要是因为C语言开发方法复杂且开发周期长,不适应当前快速开发应用程序的需求。3飞机模型的建立在使用OpenGL前首先应进行初始化工作,这些工作主要包括:设置象素格式——主要完成OpenGL的绘制风格、颜色模式、深度位数等重要信息的设定,创建设备描述表和着色描述表——告诉Windows怎样在一个窗口中显示信息。初始化工作为后续的模型建立做好了准备。创建三维物体首先是在三维空间建立物体的模型,然后计算机经过几何变换、投影变换、剪切变换、视口变换等得到理想的视觉效果,最后在二维平面上显示出来,算法上是通过线性变换和矩阵运算实现的。传统的三维物体建模通常是通过3DMAX等软件先建立模型,再通过数据格式转换,导出数据文件,最后由OpenGL绘制,这种方法虽然能生成较为逼真的模型,但是数据量很大,由于本套系统不要求很复杂的目标形状所以在建模时采用了简单化处理。目标模型设定为飞机,在绘制飞机的函数DrawPlane里首先调用OpernGL实用库中的gluNewQuadric()命令建立一个二次曲面对象,再调用三次gluCylinder(GLuquadricObj*obj,GLdoublebaseRadius,GLdoubletopRadius,GLdoubleheight,GLintslices,GLintstacks)命令绘制三个圆柱体,其中变量的具体含义如下obj二次曲面对象baseRadiu指定所绘制圆柱的底半径topRadius指定圆柱的上表面半径height指定圆柱的高slices指定围绕z轴的子分割的因数stacks指定沿z轴的子分割的因数三个圆柱体的区别在于第一个圆柱体的上表面半径为0,第二个圆柱体的上下半径相同,第三个圆柱体的上表面半径略大于底半径。三个圆柱体分别用于模拟机头、机身和机尾,通过OpenGL中的平移命令glTranslatef*()将三个圆柱体变换到合适位置,此时飞机的主要部分就完成了。飞机的侧翼和尾翼是用OpenGL中多边形的绘制来完成的,在圆柱体的合适位置指定多边形的顶点,调用如下绘制命令即可最后加入光照,飞机模型就建立好了。图2、图3和图4分别给出了按上述方法建立的飞机模型的俯视图、侧视图和有一定角度的旋转图。航迹的编辑在实际空间中进行,采用右手直角坐标系,此时雷达处于直角坐标系的原点,X-Y平面表示水平面,Z表示高度,对航迹采用分段编辑的方法。一条航迹可分成多段,每段内采用直线的运动形式,对于复杂运动形式(如近似圆周运动)的编辑可采用多段直线拟合的方法。三维空间航迹的编辑采用三个二维平面投影合成的方法来实现,即首先在X-Y平面(俯视图)上分段编辑一条航迹,再在X-Z平面(前视图)和Y-Z平面(右视图)为该航迹的每个分段点给出一个高度值,通过对三条二维曲线的合成就可以得到三维空间中的一条航迹。之所以采用三个投影面,是为了解决航迹落在Y轴或X轴上这种特殊情况下的编辑问题。如果没有这种特殊情况存在,那么只需在两个投影面内编辑即可。本套系统最多可编辑200条航迹,每条航迹上最多50个航迹点。定义一个200行150列的数组FlightPath,数组的每一行代表一条航迹,一行上的每三列代表一个航迹点,分别存放该点的X、Y、Z坐标值,同时定义一个200列的一维数组PointNumbers,用于存放每条航迹上航迹点的总数,程序代码如下轨迹的绘制在Delphi的面板上进行,根据实际情况将面板航的背景颜色分别清为两种不同颜色,俯视图时为土黄色,前视图时为淡蓝色,分别用于模拟地面和天空,两图之间的切换用--标志位DownFlag,加以控制,此标志为真时是俯视图,否则为前视图。代码如下设置一个用于编辑航迹的按键,每按下一次标志位PathNumber加1表示新增一条航迹。每条航迹的绘制过程如下:(1)在面板鼠标按下事件里记录当前鼠标位置。(2)在面板的双击事件里给FlightPath数组付值,用以记录航迹上各点的坐标值。先将获得的鼠标当前位置值转换成OpenGL坐标,转换公式如下(3)在绘制航迹的函数DrawFlightPath里绘制航迹进行点的平滑处理以及尺寸与颜色的设置,再用FlightPath中航迹点的坐标值循环调用OpenGL画点函数绘制航迹点。如果该条航迹的航迹点数大于1,则循环调用OpenGL画线函数在前一点和后一点之间画线。(4)最后在绘制场景的函数DrawScene中调用DrawPlane和DrawFlightPath函数进行目标与航迹的显示。由于OpenGL支持双缓存技术,在进行图形显示时,需调用SwapBuffers函数,将后台缓存绘制的图形调入前台缓存,在屏幕上显示。图5和图6分别给出了一条航迹的俯视图和前视图的编辑结果。从图中可以看出这条航迹由4段,5个航迹点组成,俯视图中给出了5个航迹点的X、Y坐标,前视图中给出了5个航迹点的X、Z坐标,因为航迹没有落在Y轴的特殊情况,所以经过图5和图6两个过程整条航迹在三维空间的位置就可确定下来了。5航迹编辑实现方法以上为雷达模

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论