论文部分内容阅读
【摘 要】基于可视化理论,本文介绍了以OpenGL为工具开发一个空情仿真系统的具体方法,重点阐述了系统实时性的实现,三维模型的建立,实时驱动模型,视点漫游等技术的实现。
【关键词】可视化 空情仿真 OpenGL
从近期几场高科技局部战争看,空袭作战,远程精确打击已成为现代战争的主要作战方式。做好防隐形飞机、巡航导弹、武装直升机等的打击和侦察监视是夺取未来反空袭作战胜利的关键。逼真地模拟敌攻击空情,是防空训练的一个基本前提。本系统利用可视化技术,对导弹、作战飞机、武装直升机等多种空袭武器进行仿真建模、实时驱动、同时模拟雷达对其航迹进行实时监测,为部队提供一种低成本、高效率的模拟训练方法。
一、空情数据可视化
空情数据可视化是将空情仿真实验中获得的大量数据用计算机图形图像的方式来展示,以期把握空情的整体演进过程。空情数据可视化属可视化技术范畴,它的系统功能包括以下几方面:a 对空情原始数据进行可视化处理,为可视化仿真开始作准备;b 对空情仿真过程进行跟踪和控制,控制仿真向着期望的方向发展;c对空情仿真数据进行可视化输出,以便于对数据的正确性进行评估。以上三点在可视化仿真系统中的关系如图1所示:
除了以上这三项一般可视化功能以外,空情数据可视化还要具有独特的可视化功能要求,那就是空情背景可视化和视点漫游。空情背景指的是所要仿真的空域内的一般的自然景物如山川,沙漠,建筑物,树木和自然现象如雨,云,雾等。这些可以增加仿真的真实性。视点漫游功能可以让观察者在系统所描绘的三维空域上任意一点来观察空情的情况,以便对整个空情的状况有一个全盘的掌握。
二、基于OpenGL的空情仿真可视化系统的实现
先就建立仿真程序框架做一说明:建立仿真程序框架首先是用Visual C++的AppWizard和ClassWizard生成一个基于MFC 的应用程序框架,得到一个Windows软件界面,可以是单文档或多文档。其次对OpenGL进行初始化,由于OpenGL函数库与操作系统无关,所以使用OpenGL函数库以前要对其进行特定的初始化操作,是它与Windows 兼容。OpenGL本身也有专门的初始化函数可以利用,它的初始化工作包括:设置像素格式,建立绘图描述表,清除缓存,光照初始化。下面就本空情仿真可视化系统实现中的几个具体问题予以讨论:
(一)系统实时性的实现
在WINDOWS中实现实时性一般是套用计时器的定时发送功能来实现,使计时器不但充当动画的驱动器而且让它担负实时作用。但是计时器所发出的WM_TIMER消息的优先级不高,只有在windows消息队列中没有其他消息时才处理此消息。这样如果操作系统忙于其他任务时,WM_TIMER消息就得不到及时响应。
由于实时空情仿真对实时性的要求比较高,所以在实时性的实现上我们放弃用计时器这种方法,而仅将它作为动画驱动器用。在实时控制上采用基于实际时间(用操作系统时间来代替)的实时性方法,即调用函数QueryPerformanceCounter(&Time)使仿真嚴格按系统时间来推进,具体是让仿真场景中的一切运动物体的运动均严格基于系统时间而不是帧速率。从而避免了因帧速率难以固定而引起的实时性失真。这里用本系统的一个移动目标(如飞机等)的轨迹作为例子具体说明这种方法的实现。此目标以匀加速度a做直线运动,如图2所示。
当t=t。时,目标从P0(R0,E0,bZ0)处进入,其中R0为它的起始斜距,bZ0为起始方位角,E0为起始仰角.经过Dt 时间到达P1点(目标的起始航向为h0,起始俯仰角e0),目标的起始速度为V0.由运动学原理和几何关系可知:
通过上面这段代码可以实现在T1时刻在新位置P1处飞行目标的新姿态的绘制。
(二)空情模型在场景中的绘制
要在场景中绘制目标模型,首先根据目标在空中运动的运动学方程,分别解算出经过Dt时间所运动到的新一点的位置量和姿态参数 ,位置量告诉我们在场景中的什么位置绘,姿态参数决定在该位置上模型的确切的姿态。以上的运动参数可通过下列OpenGL函数将模型在场景中显示出来:
…………….
glTranslated (New_x, New_y, New_z); // 新一点的位置量将模型移到新位置上
glRotated (Rotate_x, 1.0, 0.0, 0.0); // 根据新的姿态参数调整模型姿态绕x 轴旋转
glRotated (Rotate_y, 0.0, 1.0, 0.0); //模型绕y 轴旋转
glRotated (Rotate_z, 0.0, 0.0, 1.0); // 模型绕z 轴旋转
Draw3DSModel( ); //调用显示列表在新位置上用新姿态参数重绘3D模型
……………..
至于空情模型在场景中的实时性驱动,有关实时性上面已经讨论过,而模型的驱动依然用计时器实现,此时计时器只充当模型的动画驱动器角色。
(三)实时驱动多个模型
空情仿真系统一般都是对多目标多雷达系统的模拟,所以属于多模型系统,鉴于开发本系统的主要目的是为了模拟多雷达采集空中移动目标的航迹数据,各雷达之间对同一空域所进行的侦测可以认为是独立的,而且各目标飞行具有很大的机动性,也可以认为目标之间是相互独立的 。实际上各雷达对目标的侦测及各目标运动是同时进行的,所以所开发的仿真系统也必须体现出各模型的这种并发性以保证仿真精度和实时性。要对此进行模拟即要采用多线程的并发执行来实现,让各个线程并行运行,共享CPU,这种方法也可加快显示速度,提高视觉效果。具体是给每个雷达赋予一个线程,以此来模拟各个雷达对同一空域各目标的独立侦测。也给每个目标赋予一个线程,使它们独立的按各自轨迹飞行,在各个进程同时推进时必须是基于同一时间参照系(可以以OS时间为准)实时地进行,以确保仿真精度的要求。图3展示了空情仿真基于共享CPU 的多模型并发运行的情况。
(四)空情背景的实时绘制和空情场景的视点漫游
空情背景可用OpenGL的纹理贴图方式来拼接,接缝处若有痕迹,可用山,树,建筑物等予以遮挡。 山,树,建筑物等最好用实时渲染的三维立体图来表示,这样可提高场景的逼真度。本系统中的山采用的是随机网格生成法,首先定义山形高程的最大最小值来定出山的陡峭度,再用多阶曲线插值的方法,对山进行一定的平滑处理,最后再贴以山的纹理和颜色增加逼真度。关于视点漫游,OpenGL提供了专门的漫游函数gluLookAt(eyex, eyey, eyez, centerx, centery,centerz,upx,upy,upz)。利用它本系统实现两种方式的漫游功能,第一种方式是以观察者的视点对整个仿真空域的漫游;第二种方法是模拟雷达的视点跟踪一个空中目标,按目标的轨迹对整个空域进行漫游。
三、结束语
本文论述可视化原理及其在空情仿真系统中的应用实现。其中利用WINDOWS多任务的特点,在Visual C++ 环境下,采用了开放式图形库OpenGL在微机上实现了三维动画仿真。可以看出可视化技术在空情仿真应用中所发挥的重要作用。同时本文中提出的一些方法也具有很好的扩展性,对于其他可视化系统也具有一定借鉴作用。
参考文献:
[1]徐桄,崔晓宝等. 空战仿真可视化系统的研究与实现[J]. 系统仿真学报 2000,12(6):648~651
[2]翟丽霞,柳松,茅玉龙. 一种用于雷达系统功能仿真的ActiveX控件的开发与实现方法[J]. 雷达与对抗. 1998,(3):1~4
[3]贾志刚 精通OpenGL[M]北京:电子工业出版社,1998
[4]费广正,乔林. Visual C++高级编程技术OpenGL篇[M].北京:中国铁道出版社,2000
作者简介:
魏亭(1975—),男,西安工业大学讲师,主要研究方向为智能检测与控制、计算机网络。
【关键词】可视化 空情仿真 OpenGL
从近期几场高科技局部战争看,空袭作战,远程精确打击已成为现代战争的主要作战方式。做好防隐形飞机、巡航导弹、武装直升机等的打击和侦察监视是夺取未来反空袭作战胜利的关键。逼真地模拟敌攻击空情,是防空训练的一个基本前提。本系统利用可视化技术,对导弹、作战飞机、武装直升机等多种空袭武器进行仿真建模、实时驱动、同时模拟雷达对其航迹进行实时监测,为部队提供一种低成本、高效率的模拟训练方法。
一、空情数据可视化
空情数据可视化是将空情仿真实验中获得的大量数据用计算机图形图像的方式来展示,以期把握空情的整体演进过程。空情数据可视化属可视化技术范畴,它的系统功能包括以下几方面:a 对空情原始数据进行可视化处理,为可视化仿真开始作准备;b 对空情仿真过程进行跟踪和控制,控制仿真向着期望的方向发展;c对空情仿真数据进行可视化输出,以便于对数据的正确性进行评估。以上三点在可视化仿真系统中的关系如图1所示:
除了以上这三项一般可视化功能以外,空情数据可视化还要具有独特的可视化功能要求,那就是空情背景可视化和视点漫游。空情背景指的是所要仿真的空域内的一般的自然景物如山川,沙漠,建筑物,树木和自然现象如雨,云,雾等。这些可以增加仿真的真实性。视点漫游功能可以让观察者在系统所描绘的三维空域上任意一点来观察空情的情况,以便对整个空情的状况有一个全盘的掌握。
二、基于OpenGL的空情仿真可视化系统的实现
先就建立仿真程序框架做一说明:建立仿真程序框架首先是用Visual C++的AppWizard和ClassWizard生成一个基于MFC 的应用程序框架,得到一个Windows软件界面,可以是单文档或多文档。其次对OpenGL进行初始化,由于OpenGL函数库与操作系统无关,所以使用OpenGL函数库以前要对其进行特定的初始化操作,是它与Windows 兼容。OpenGL本身也有专门的初始化函数可以利用,它的初始化工作包括:设置像素格式,建立绘图描述表,清除缓存,光照初始化。下面就本空情仿真可视化系统实现中的几个具体问题予以讨论:
(一)系统实时性的实现
在WINDOWS中实现实时性一般是套用计时器的定时发送功能来实现,使计时器不但充当动画的驱动器而且让它担负实时作用。但是计时器所发出的WM_TIMER消息的优先级不高,只有在windows消息队列中没有其他消息时才处理此消息。这样如果操作系统忙于其他任务时,WM_TIMER消息就得不到及时响应。
由于实时空情仿真对实时性的要求比较高,所以在实时性的实现上我们放弃用计时器这种方法,而仅将它作为动画驱动器用。在实时控制上采用基于实际时间(用操作系统时间来代替)的实时性方法,即调用函数QueryPerformanceCounter(&Time)使仿真嚴格按系统时间来推进,具体是让仿真场景中的一切运动物体的运动均严格基于系统时间而不是帧速率。从而避免了因帧速率难以固定而引起的实时性失真。这里用本系统的一个移动目标(如飞机等)的轨迹作为例子具体说明这种方法的实现。此目标以匀加速度a做直线运动,如图2所示。
当t=t。时,目标从P0(R0,E0,bZ0)处进入,其中R0为它的起始斜距,bZ0为起始方位角,E0为起始仰角.经过Dt 时间到达P1点(目标的起始航向为h0,起始俯仰角e0),目标的起始速度为V0.由运动学原理和几何关系可知:
通过上面这段代码可以实现在T1时刻在新位置P1处飞行目标的新姿态的绘制。
(二)空情模型在场景中的绘制
要在场景中绘制目标模型,首先根据目标在空中运动的运动学方程,分别解算出经过Dt时间所运动到的新一点的位置量和姿态参数 ,位置量告诉我们在场景中的什么位置绘,姿态参数决定在该位置上模型的确切的姿态。以上的运动参数可通过下列OpenGL函数将模型在场景中显示出来:
…………….
glTranslated (New_x, New_y, New_z); // 新一点的位置量将模型移到新位置上
glRotated (Rotate_x, 1.0, 0.0, 0.0); // 根据新的姿态参数调整模型姿态绕x 轴旋转
glRotated (Rotate_y, 0.0, 1.0, 0.0); //模型绕y 轴旋转
glRotated (Rotate_z, 0.0, 0.0, 1.0); // 模型绕z 轴旋转
Draw3DSModel( ); //调用显示列表在新位置上用新姿态参数重绘3D模型
……………..
至于空情模型在场景中的实时性驱动,有关实时性上面已经讨论过,而模型的驱动依然用计时器实现,此时计时器只充当模型的动画驱动器角色。
(三)实时驱动多个模型
空情仿真系统一般都是对多目标多雷达系统的模拟,所以属于多模型系统,鉴于开发本系统的主要目的是为了模拟多雷达采集空中移动目标的航迹数据,各雷达之间对同一空域所进行的侦测可以认为是独立的,而且各目标飞行具有很大的机动性,也可以认为目标之间是相互独立的 。实际上各雷达对目标的侦测及各目标运动是同时进行的,所以所开发的仿真系统也必须体现出各模型的这种并发性以保证仿真精度和实时性。要对此进行模拟即要采用多线程的并发执行来实现,让各个线程并行运行,共享CPU,这种方法也可加快显示速度,提高视觉效果。具体是给每个雷达赋予一个线程,以此来模拟各个雷达对同一空域各目标的独立侦测。也给每个目标赋予一个线程,使它们独立的按各自轨迹飞行,在各个进程同时推进时必须是基于同一时间参照系(可以以OS时间为准)实时地进行,以确保仿真精度的要求。图3展示了空情仿真基于共享CPU 的多模型并发运行的情况。
(四)空情背景的实时绘制和空情场景的视点漫游
空情背景可用OpenGL的纹理贴图方式来拼接,接缝处若有痕迹,可用山,树,建筑物等予以遮挡。 山,树,建筑物等最好用实时渲染的三维立体图来表示,这样可提高场景的逼真度。本系统中的山采用的是随机网格生成法,首先定义山形高程的最大最小值来定出山的陡峭度,再用多阶曲线插值的方法,对山进行一定的平滑处理,最后再贴以山的纹理和颜色增加逼真度。关于视点漫游,OpenGL提供了专门的漫游函数gluLookAt(eyex, eyey, eyez, centerx, centery,centerz,upx,upy,upz)。利用它本系统实现两种方式的漫游功能,第一种方式是以观察者的视点对整个仿真空域的漫游;第二种方法是模拟雷达的视点跟踪一个空中目标,按目标的轨迹对整个空域进行漫游。
三、结束语
本文论述可视化原理及其在空情仿真系统中的应用实现。其中利用WINDOWS多任务的特点,在Visual C++ 环境下,采用了开放式图形库OpenGL在微机上实现了三维动画仿真。可以看出可视化技术在空情仿真应用中所发挥的重要作用。同时本文中提出的一些方法也具有很好的扩展性,对于其他可视化系统也具有一定借鉴作用。
参考文献:
[1]徐桄,崔晓宝等. 空战仿真可视化系统的研究与实现[J]. 系统仿真学报 2000,12(6):648~651
[2]翟丽霞,柳松,茅玉龙. 一种用于雷达系统功能仿真的ActiveX控件的开发与实现方法[J]. 雷达与对抗. 1998,(3):1~4
[3]贾志刚 精通OpenGL[M]北京:电子工业出版社,1998
[4]费广正,乔林. Visual C++高级编程技术OpenGL篇[M].北京:中国铁道出版社,2000
作者简介:
魏亭(1975—),男,西安工业大学讲师,主要研究方向为智能检测与控制、计算机网络。