logo资料库

基于Visual+C++和OpenGL的具有余辉效果的P型雷达显示器仿真.pdf

第1页 / 共4页
第2页 / 共4页
第3页 / 共4页
第4页 / 共4页
资料共4页,全文预览结束
第9卷第lO期2009年5月 1671-1819(2009)10—2751-04 科学技术与工程 Science Technology and Engineering V01.9 No.10 May 2009 @2009 sci.Tech.Engn昏 基于Visual C++和OpenGL的具有余辉 效果的P型雷达显示器仿真 刘 焱张宏伟 曹成俊 (军械工程学院光学与电子工程系,石家庄050003) 摘要对雷达P型显示器的仿真是构建雷达虚拟维修训练系统的重要组成部分。针对扫描线变速变化时余辉的变化较难 实现的问题,提出动态扇扫法对雷达手动扫描模式下的余辉进行仿真,采用Visual C++结合OpenGL为软件环境,双线程数据 交互的方法,易于实现,效果理想,具有工程上的意义。 关键词Visual C 4-+ OpenGL 余辉 仿真 中图法分类号TN957.7; 文献标志码B 现代雷达是集电子技术、微波技术、光电技术、 微电子技术、精密机械、自动控制及计算机技术为 一体的复杂电子系统,是现代高科技战争中的重要 装备。新型雷达装备技术复杂,集成度高,器件昂 1 Visual C++结合OpenGL(Open Graph· ics Library)编程 贵、造价高,更主要的是数量有限,采用传统的实装 目前的雷达显示器的计算机仿真大多采用Visual 训练难以满足训练要求。随着计算机仿真技术的 发展,用仿真技术来模拟雷达训练平台变得越来越 容易。 雷达显示器是雷达与操作员之间最重要的交 互界面,随着雷达技术的不断发展,雷达所实现的 功能也越来越复杂,雷达显示器作为雷达终端设 备,所显示的内容也越来越丰富。但是无论哪一种 模拟雷达显示系统,其扫描过程中余辉的实现仍然 是雷达显示器仿真的基础,也是雷达系统仿真的一 个重要环节。在建立雷达虚拟维修训练系统时,余 辉的变化可以体现仿真的逼真程度,而仿真的逼真 程度将直接影响到整个模拟系统的效果。利用计 算机模拟雷达显示系统,具有开发方便、不依赖特 定的硬件、可靠性高、适应性强、通用性强和可移植 性好等特点。 2009年2月8日收到 Basic、Delphi或Visual C++和OpenGL来实现。采用 Visual Basic或Delphi的优点是使用方便、开发周期 短,缺点是显示画面不够逼真、美观、可移植性差。采 用Visual C++和OpenGL实现雷达显示系统,优点在 于C++具有灵活性好、效率高、可移植性好。 Visual C++是微软公司推出的基于Windows环 境的一种面向对象的可视化编程环境,被公认为微 软第一计算机语言。借助于微软公司的MFC类库 和应用程序框架能够轻易开发出Windows标准界面 的应用程序…。尽管Visual C++是可视化编程中 的佼佼者,但它并不是图形图像编程的最好选择。 OpenGL是一个与图形硬件无关的应用程序开发接 口(API),是一个完全可移植、速度很快的3D图形 和建模库,具有图形质量高、可靠性高、可移植性好 等众多优点,可以运行在Window平台和UNIX平台 上。为了利用Visual C++6.0的强大功能来实现对 第一作者简介:刘焱(1985),男,军械工程学院雷达工程教研室 OpenGL三维图形的绘制,微软将OpenGL集成到了 导航、制导与控制专业硕士研究生,研究方向:武器系统检测与故 障诊断。E-mail:bluefrre 0517@163.corn。 Windows中,Windows提供了OpenGL32.DLL和 GLU32.DLL动态链接库,Visual C++6.0包含了GL ˝ • ‰ ˚
科学技术与工程 9卷 库(opengl32.Lib)、辅助库(glaux.1ib)和实用库 度进行监控,即利用双线程编程的方法来实现。这 (glu32.1ib)旧。,这使OpenGL成为最优秀的可视化 编程接口之一。开发者可以方便地利用这个图形 库,使编程简单、快速,OpenGL中的RGBA颜色模 种方法的好处在于手轮的监控与扫描线转动之间 不产生占用计算机处理时间上的冲突。控制界面 采用编辑框显示扫描线的方位。用微调按钮代替手 式,结合反走样和颜色融合,使图形图像更加逼真。 所以,Visual C++结合OpenGL编程是一种比较合 理的选择。 2雷达P型显示器余辉的实现方法 实现扫描线余辉有画线法、固定扇扫法、逐点 消隐法等。其中,画线法实现简单,但产生辐射状 花纹;逐点消隐法效果逼真但实现起来比较复杂; 通常采用固定扇扫法实现扫描线的余辉,效果比较 逼真且实现过程也相对容易"J。但是,固定扇扫法 对于实现全天候雷达进行圆扫的仿真是十分适用 的,而许多雷达装备都有手动扫描的功能,对于这 些雷达的手动扫描功能进行模拟仿真,固定扇扫法 就达不到实际雷达的效果。 针对雷达的手动扫描余辉的特点,即随着手轮 摇动的快慢余辉的长短也发生变化,笔者希望在固 定扇扫法的基础上提出一种新的方法来实现动态 变化的余辉,并称之为动态扇扫法。固定扇扫法顾 名思义是将余辉的长度固定,即先画好一个固定角 度的扇形,其亮度由强到弱逐渐变化,视觉上给人 感觉是一个已经转了一定角度并带有余辉的扫描 状态。再通过SetTimer函数设定时间让扇形转动。 至此,雷达的圆扫便实现了。而所谓动态扇扫即是 采用实时监控手轮的摇动频率来改变余辉的长短, 扇形手轮快速摇动,余辉变长,反之则变短。也就 轮控制扫描线的转动,具体流程如图1所示。 方位差监控线程 扫描线绘制主线程 获警耄薯文本框中方位} I I 初始化静止的扫描线Imdlgan 角的值 glel √ l‘ …~一f。。 I点击微调按钮。改变编辑框中L I 方位角的值,扫描线转动I。 , 睡踯秒Sleep(100谚 l | —+l .f以方位差为扇形的角度绘制 l扫描线余辉m k:强419k 获取当前文本框中方位 一角的值m dlgangle2 I 扫描线停止转动,余辉以g-O 1 阻』豳硼dlg媳gl&_m』g哪涸I 秒m_瑚少4度的速率变短 计算方位差 l I <辜≯ 余辉碱小到0,扫描线饺割 I 到静止状态 图l 双线程实现动态余辉流程图 下面以顺时针扫描为例说明关键程序语句。 方位差监控线程需要写在主程序的开始,在 ThreadFunc函数中添加如下代码: CEdit‘pinfo=(CEdit·)lpParam;//线程函数参数 CStrlng sⅡ: pir正。一>C,etWindowText(啦);//获取第一个方位 int m_dlganOel=a10i(sⅡ); 是改变固定扇扫法中扇形的角度,即方位差,构建 Sleep(1000)://线程睡眠1秒 动态变化的扇形。 由于雷达扫描模式采用手动扫描模式,这就需 要对余辉的长短采用实时矫正的方法。但是在同 一个线程中既实现扫描线的转动,同时又不停地对 手轮摇动的速度进行监控,并实时改变余辉的长 度,这在计算机分配响应时间上是很难协调的。因 此,笔者提出使用一个单独的线程对手轮摇动的速 pinto一>C,etWindowText(str);//获取第二个方位 int m-Idlgan妣=atoi(sty); int mLdl{Flirectl=m dlgdir∞t2;//从主线程获得扫描方向 if(/n—dlgdirectl==1)//扫描方向为顺时针 }m_dlgkl=m—dl_g锄gk2一nLdl鲫gIel;}//Yr舅t方位差 通常,一个次要的线程为主线程执行一定的任 务,它们之间需要有一个联系的渠道,可以使用全 局变量或者自定义的消息来实现线程间的通信。 ˝ • ‰ ˚
10期 刘焱,等:基于Visual C++和OpenGL的具有余辉效果的P型雷达显示器仿真 2753 由于属于同一个进程的各个线程共享操作系统分 Invalidate(FALSE); 配该进程的资源,因此解决线程间通信最简单的方 为了保证对扫描线进行相关操作后,绘图界面 能够实时的更新,需要经常使用Invalidate(FALsE) 语句来重新绘制OnDraw绘图函数中的内容。而扫 描线的绘制就是通过下面的语句来绘制的: gmot出a(一re_angle,0.0,0.O,1.O);//实现扫描线转动 if(m-direct==I)//顺时针扫描 {for(doublem—i=0:m—i>=一m_k;m_i一=0.6)//通过循环 语句绘制扇形 {glColor4d(1+m—i/(m—k),1+m—i/(m—k),0,1); ∥方位差m_k的变化改变扫描线余辉亮度的变化 glBegin(GL_TRIANGLE—FAN);∥以许多角度很小的等腰三角 形组成近似的扇形[5]glVertex3d(0,0,0); glYertex3d(8★cob(PI}(一m_i+90)/180),8 t sin(PI·(一m— i+90)/180),0);//极坐标 glVertex3d(8}cos(PI$(一m—i+91)/180),8·sin(PI}(一m— i+91)/180),0); glEnd(); glFlush();}I 仿真结果如图2、图3所示。 法是使用全局变量。使用全局变量可以实现由主 线程向工作线程“发送消息”。 volatile int m—dlgkl,m—dlgk2。m_dlgdireet2;//定义全局变量 在微调按钮控件的OnDeltaposSpinl函数中调 用自定义消息函数OnSetManual将扫描方向、方位 角和方位差从控制界面传递给绘制界面。 if(pNMUpDown一>iDeha>=1)//增大方位角,即顺时针扫描 }m—dlgdirect=1; m_dlgdireet2=m dlgdireet; m_dlgangle=m—spin.GetPos()+(int)pNMUpDown一>iDelta; //保持方位同步; m_dlgk=m_dlgkl;//获取方位差 m—pParent一>SendMessage(WM—SET—MANUAL,(WPARAM) this);} //发送手动扫描自定义消息 点击微调按钮会使编辑框中的方位值发生变 化,而方位差监控线程就是通过编辑框的OnChan— geEditl函数添加的CWinThread木pThread=MxBe— ginThread(ThreadFunc,&m_edit);语句来启动的。 在自定义的消息函数OnSetManual中获取从控 制界面传送的方位、方位差和扫描方向,并设置一 个计时器,最后重新绘制并刷新屏幕。 设置计时器是用于在停止扫描时实现余辉的 自动衰减。这里用到了一个计算机响应消息的优 先级技巧。计时器消息在发送给应用程序时具有 较低的优先级别,只有在消息队列中没有其他消息 时才处理它们H J。因此,在按住微调按钮不放时, 计算机不停地处理按钮消息、自定义消息和重新绘 图2控制界面 图的命令消息,而计时器消息由于较低的优先级一 直不被响应,但也不会积压在消息队列中。当松开 微调按钮停止扫描时,计算机只接收到一条计时器 消息,而不会突然接收到多条计时器消息。 在OnTimer函数中加入下列代码实现余辉的自 动衰减: m_k一=4;//方位差以每0.1秒减小4变化,即余辉每秒减少 40度 if(m—k<=O)//余辉衰减完毕回到扫描线静止状态 {nl—direct=0; KillTimer(1):} 图3绘图界面 ˝ • ‰ ˚
2754 科学技术与工程 9卷 3结束语 本文采用Visual C++和OpenGL相结合编程为 技术背景,通过双线程实现手轮控制扫描线转动过 程的余辉变化,创新出动态扇扫法。通过计算机仿 真的结果,可以看到效果逼真,符合真实装备的情 况。本文只是对雷达虚拟维修训练系统仿真技术 的初步研究,在以后的工作中还会对雷达显示器上 符号标记的实现、目标的跟踪、系统的通用性、扩展 性等内容作进一步的研究。 参考文献 l郑敏,范忠诚.零基础学Visual C++.北京:机械工业出版 社,2008 2江早.OpenGL VC/VB图形编程.北京:科学出版杜,2001 3(美)Prmise J.MFC Windows程序设计.北京博彦科技发展有限 责任公司,译.北京:清华大学出版社,2007 4王立振,刘润华.基于Visual C++和OpenGL的雷达显示系统实 现.空军雷达学院学报,20D3;17(4):lO—12 5陈靖宇,王春波,倪天权.基于OpenGL的具有余辉效果的雷达显 示器仿真.微计算机信息,2006;22(10-1):164一166 Computer Simulation of the P Type Radar Indicator、订th Long Persistence Based on Visual C++and OpenGL (Department of Optics and Electronic Engineering 0ldl瑚ce Erlgineering College,Shijiazhuang 050003,P.R.China) LIU Yan,ZHANG Hong-wei,CAO Cheng_jun [Abstract]The simulation of the P type radar indicator is the important part of building the virtual maintenance and tranining system for radar equipment.In order to solve the difficult problem which is about realizing the variety of long persistence while the scaning beam shifts gears,a new method is introduced to simulate the presistence of radar in manual scan model.Visual C++and OpenGL are adopt to programme.and two threads to exchange the da— ta.The whole simulation has the advantage of easy operation,vivid effect,and signification in engineering. [Key words] Long Persistence Simulation Visual C++ OpenGL ˝ • ‰ ˚
分享到:
收藏