论文部分内容阅读
[摘 要] 本文介绍了光电经纬仪模拟训练器中三维视景仿真的具体实现方法,并分析了在开发过程中的一些关键技术问题,包括三维建模、场景的实时绘制、实时数据驱动显示等,整个视景仿真是在Visual C++环境下,采用OpenGL图形库实现的。
[关键词] 模拟训练器 OpenGL 视景仿真
1 引言
OpenGL是一个功能强大、调用方便的底层3D图形库,它提供高质量、高速度的图形处理能力,如:细腻的纹理表现、快速的顶点传输速度、接近光线跟踪的画面质量、自由的控制能力等。它可以在客户机/服务器系统中工作,具有网络功能。它是与硬件无关的软件接口,可以在不同的平台之间进行移植。同时,Microsoft、SGI、DEG、SUN、HP等公司大都采用OpenGL作为三维图形标准,很多厂商也都以OpenGL为基础开发自己的产品,比如动画制作软件SoftImage、3DMax、仿真软件OpenInventor、VR软件WorldToolKit、CAM软件Pro/Engineer、GIS软件ARC/INFO、Vrmap等。特别是由于微软的加入,在微机平台上实现三维真实感图形的生成成为可能。
为了获得良好的训练效果,提高场景显示的逼真度和系统的通用性,为操作手提供接近实战的训练平台,系统采用了基于OpenGL的三维图形标准,
用Visual C++作为开发工具来实现。如图1所示,构建视景仿真系统主要经过以下几个环节:
2 飞行器实体建模
飞行器的三维实体建模是整个视景仿真系统的基础,要生成逼真的实时仿真动画,首先要生成高质量的三维实体模型。OpenGL提供了了一系列的函数以绘制点、线、多边形、曲线、曲面等基本单元,然后利用基本图元按照一定的空间位置形成复杂的几何物体。采用这种方法对于形状简单的物体是较为容易的,但对于形状复杂的物体,单纯利用这种方法其工作量是非常大的,而且不可能一次性的在内存中编写所有的语句。
借助专业的建模软件3DS MAX进行建模,然后通过OpenGL函数在程序中进行渲染模型,建模逼真度高且简单,易控制。
将建好的模型调入到程序中,有几种方法可以实现。一种是直接编写读取*.3ds格式的函数调用模型,这种方法在模型简单时不失为一种方法,因为只要用读取模型的函数直接调用*.3ds格式的文件就可以了,当模型修改或改变时不用修改程序的其它部分。但是当读取的模型数据较为复杂时,则会影响系统的运行速度,因而可以使用另一种方法,即用格式转换软件先将模型文件进行转换并利用OpenGL中的显示列表功能,将三维场景中的实体分别定义为单独的显示列表,预先生成三维实体。在系统运行时只要调用所需要的显示列表即可显示相应的三维实体,而不需要重新计算实体在场景中的坐标,避免了大量的浮点运算,提高了三维实时动画的显示速度。
3 虚拟场景的绘制
3.1 背景的绘制
为了从视觉角度营造一个逼真的虚拟环境,显示画面的真实性和实时性都是非常重要的。当场景简单时,例如仅有几百个多边形,要实现实时显示并不难。但是为了得到逼真的显示效果,会有几百万个多边形,这就对实时显示提出了很高的要求。为了解决逼真度要求与实时性要求之间的矛盾,场景背景可采用纹理帖图的方式生成。
飞行器的背景环境主要是天空、海面和海水。本文采用在Visual C++中加载已存在的天空、海面等位图文件,赋予真实感的纹理,实现场景的绘制,构造真实海天环境。构造天空时,在一块大的矩形上帖上天空的图片,置于远处。海面采用相同方法处理,即将海面简化成一个平面,然后选用一幅合适的位图对海面进行纹理映射,同时通过纹理图像坐标的连续位移模拟海面的波浪。
3.2 尾焰的仿真
飞行器尾焰具有不规则的几何外形和内在的不稳定性,不能用通常的三维建模方式来制作。对于这种具有产生、发展和消失的历程的景物,图形学中通常用粒子系统来描述。粒子系统常常被用来描述火焰、烟花、水波等景物,采用粒子系统来刻画飞行器尾焰的不规则变化现象,能够达到很好的逼真度。
粒子系统的基本原理是用赋予了某种属性的微小粒子的随机运动来描述导弹飞行尾焰的特征。粒子的初始属性确定以后,每生成一帧图像前都要更新所有粒子的位置、颜色、生存器和速度等属性。绘制粒子系统的基本步骤为:
● 在系统中产生新的粒子
● 赋予新生粒子一定的静态属性
● 删除在粒子系统中存在但超过生命周期的粒子
● 对系统中所有粒子的动态属性进行更新
● 显示所有粒子所组成的图形
对于新诞生的粒子,其初始属性包括初始位置、初始速度加速度、初始颜色、初始透明度和生存器。这些初始属性由描述景物的一系列随机函数来控制。对于不同粒子其初始属性必然不同,但所有粒子的属性总体统计符合描述景物的控制函数。
对于已存在的粒子,将在初始属性上进行活动,若i-1帧的粒子为fi-1,第i帧粒子为fi,则有:
位置:p(fi)=p(fi-1)+v(fi-1)*(fi-fi-1)
速度:v(fi)=v(fi-1)+a*(fi-fi-1)
颜色:c(fi)=c(fi-1)+△c*(fi-fi-1)
透明度:t(fi)=t(fi-1)+△t*(fi-fi-1)
生存器:l(fi)=l(fi-1)-1
其中fi、fi-1为帧号,a、△c、△t为当前粒子的加速度、颜色变化率、透明度变化率。粒子消亡由生存期属性l(fi)控制。
4 视景系统的实时驱动
4.1 模型运动的数据驱动
场景中模型的运动是采用数据驱动方式,飞行器是按照仿真程序计算出来的弹道运动的,根据采集的当前设备状态与模拟弹道数据进行比较后得出的结果进行绘制。采集当前设备数据内容主要包括起飞相对时ΔT、当前编码器数值A、E;仿真程序计算的飞行弹道数据包括当前时刻的空间位置(x,y,z)(DX-2坐标系)、速度分量(dx,dy,dz)、以及火箭的姿态角。目标姿态角是指模拟目标的轴线方向,可近似看作目标的射向,测量直角坐标系中目标的3个坐标轴速度分量正好是模拟视场中目标的轴线方向,试验证明此方法模拟场景真实,可以用来进行模拟训练。场景每帧画面的绘制流程如图2所示:
4.2 运动参数的计算及坐标变换
由采集设备当前的ΔT、A、E,通过读取理论弹道文件得到当前DX-2系
Mb为测量系到屏幕系转换矩阵。
至此虚拟环境中的物体坐标已经计算完毕,但要将物体显示到屏幕窗口,OpenGL还要经过模型转换、投影转换、视口转换几个步骤。模型转换用于在坐标系中放置物体并设置物体的方向(姿态);投影转换用于设置可视区域的大小和形状(相当于瞄准镜的指向和视场大小);视口转换用于将图像转换到Windows的窗口坐标。
M为模型取景矩阵,由物体的姿态角决定。W2为OpenGL内部计算缩放因子,默认为1。
5 结束语
本文叙述了在光电经纬仪模拟训练器中利用OpenGL进行视景仿真过程中所涉及的几点关键问题,对飞行器建模、背景绘制及场景的实时驱动实现方式做了详细的阐述。三维模型的实时真实画面应用于模拟训练,将会最大限度的贴近真实目标,大大提高操作手接近实战条件下的跟踪训练效果。
参 考 文 献
[1] 胡涛,李阔,视景仿真技术应用研究,光电技术应用,2004,Vol.19,No.3.
[2] 万斌等. Visual C ++ OpenGL DirectX三维编程宝典[M] .北京:北京希望出版社,2003.
[3] 袁绪龙,张宇文等,基于OpenGL的弹道视景仿真系统设计,电脑与信息技术,2001.4.
[4] 何兆才,光学测量系统,国防工业出版社,1996.■
[关键词] 模拟训练器 OpenGL 视景仿真
1 引言
OpenGL是一个功能强大、调用方便的底层3D图形库,它提供高质量、高速度的图形处理能力,如:细腻的纹理表现、快速的顶点传输速度、接近光线跟踪的画面质量、自由的控制能力等。它可以在客户机/服务器系统中工作,具有网络功能。它是与硬件无关的软件接口,可以在不同的平台之间进行移植。同时,Microsoft、SGI、DEG、SUN、HP等公司大都采用OpenGL作为三维图形标准,很多厂商也都以OpenGL为基础开发自己的产品,比如动画制作软件SoftImage、3DMax、仿真软件OpenInventor、VR软件WorldToolKit、CAM软件Pro/Engineer、GIS软件ARC/INFO、Vrmap等。特别是由于微软的加入,在微机平台上实现三维真实感图形的生成成为可能。
为了获得良好的训练效果,提高场景显示的逼真度和系统的通用性,为操作手提供接近实战的训练平台,系统采用了基于OpenGL的三维图形标准,
用Visual C++作为开发工具来实现。如图1所示,构建视景仿真系统主要经过以下几个环节:
2 飞行器实体建模
飞行器的三维实体建模是整个视景仿真系统的基础,要生成逼真的实时仿真动画,首先要生成高质量的三维实体模型。OpenGL提供了了一系列的函数以绘制点、线、多边形、曲线、曲面等基本单元,然后利用基本图元按照一定的空间位置形成复杂的几何物体。采用这种方法对于形状简单的物体是较为容易的,但对于形状复杂的物体,单纯利用这种方法其工作量是非常大的,而且不可能一次性的在内存中编写所有的语句。
借助专业的建模软件3DS MAX进行建模,然后通过OpenGL函数在程序中进行渲染模型,建模逼真度高且简单,易控制。
将建好的模型调入到程序中,有几种方法可以实现。一种是直接编写读取*.3ds格式的函数调用模型,这种方法在模型简单时不失为一种方法,因为只要用读取模型的函数直接调用*.3ds格式的文件就可以了,当模型修改或改变时不用修改程序的其它部分。但是当读取的模型数据较为复杂时,则会影响系统的运行速度,因而可以使用另一种方法,即用格式转换软件先将模型文件进行转换并利用OpenGL中的显示列表功能,将三维场景中的实体分别定义为单独的显示列表,预先生成三维实体。在系统运行时只要调用所需要的显示列表即可显示相应的三维实体,而不需要重新计算实体在场景中的坐标,避免了大量的浮点运算,提高了三维实时动画的显示速度。
3 虚拟场景的绘制
3.1 背景的绘制
为了从视觉角度营造一个逼真的虚拟环境,显示画面的真实性和实时性都是非常重要的。当场景简单时,例如仅有几百个多边形,要实现实时显示并不难。但是为了得到逼真的显示效果,会有几百万个多边形,这就对实时显示提出了很高的要求。为了解决逼真度要求与实时性要求之间的矛盾,场景背景可采用纹理帖图的方式生成。
飞行器的背景环境主要是天空、海面和海水。本文采用在Visual C++中加载已存在的天空、海面等位图文件,赋予真实感的纹理,实现场景的绘制,构造真实海天环境。构造天空时,在一块大的矩形上帖上天空的图片,置于远处。海面采用相同方法处理,即将海面简化成一个平面,然后选用一幅合适的位图对海面进行纹理映射,同时通过纹理图像坐标的连续位移模拟海面的波浪。
3.2 尾焰的仿真
飞行器尾焰具有不规则的几何外形和内在的不稳定性,不能用通常的三维建模方式来制作。对于这种具有产生、发展和消失的历程的景物,图形学中通常用粒子系统来描述。粒子系统常常被用来描述火焰、烟花、水波等景物,采用粒子系统来刻画飞行器尾焰的不规则变化现象,能够达到很好的逼真度。
粒子系统的基本原理是用赋予了某种属性的微小粒子的随机运动来描述导弹飞行尾焰的特征。粒子的初始属性确定以后,每生成一帧图像前都要更新所有粒子的位置、颜色、生存器和速度等属性。绘制粒子系统的基本步骤为:
● 在系统中产生新的粒子
● 赋予新生粒子一定的静态属性
● 删除在粒子系统中存在但超过生命周期的粒子
● 对系统中所有粒子的动态属性进行更新
● 显示所有粒子所组成的图形
对于新诞生的粒子,其初始属性包括初始位置、初始速度加速度、初始颜色、初始透明度和生存器。这些初始属性由描述景物的一系列随机函数来控制。对于不同粒子其初始属性必然不同,但所有粒子的属性总体统计符合描述景物的控制函数。
对于已存在的粒子,将在初始属性上进行活动,若i-1帧的粒子为fi-1,第i帧粒子为fi,则有:
位置:p(fi)=p(fi-1)+v(fi-1)*(fi-fi-1)
速度:v(fi)=v(fi-1)+a*(fi-fi-1)
颜色:c(fi)=c(fi-1)+△c*(fi-fi-1)
透明度:t(fi)=t(fi-1)+△t*(fi-fi-1)
生存器:l(fi)=l(fi-1)-1
其中fi、fi-1为帧号,a、△c、△t为当前粒子的加速度、颜色变化率、透明度变化率。粒子消亡由生存期属性l(fi)控制。
4 视景系统的实时驱动
4.1 模型运动的数据驱动
场景中模型的运动是采用数据驱动方式,飞行器是按照仿真程序计算出来的弹道运动的,根据采集的当前设备状态与模拟弹道数据进行比较后得出的结果进行绘制。采集当前设备数据内容主要包括起飞相对时ΔT、当前编码器数值A、E;仿真程序计算的飞行弹道数据包括当前时刻的空间位置(x,y,z)(DX-2坐标系)、速度分量(dx,dy,dz)、以及火箭的姿态角。目标姿态角是指模拟目标的轴线方向,可近似看作目标的射向,测量直角坐标系中目标的3个坐标轴速度分量正好是模拟视场中目标的轴线方向,试验证明此方法模拟场景真实,可以用来进行模拟训练。场景每帧画面的绘制流程如图2所示:
4.2 运动参数的计算及坐标变换
由采集设备当前的ΔT、A、E,通过读取理论弹道文件得到当前DX-2系
Mb为测量系到屏幕系转换矩阵。
至此虚拟环境中的物体坐标已经计算完毕,但要将物体显示到屏幕窗口,OpenGL还要经过模型转换、投影转换、视口转换几个步骤。模型转换用于在坐标系中放置物体并设置物体的方向(姿态);投影转换用于设置可视区域的大小和形状(相当于瞄准镜的指向和视场大小);视口转换用于将图像转换到Windows的窗口坐标。
M为模型取景矩阵,由物体的姿态角决定。W2为OpenGL内部计算缩放因子,默认为1。
5 结束语
本文叙述了在光电经纬仪模拟训练器中利用OpenGL进行视景仿真过程中所涉及的几点关键问题,对飞行器建模、背景绘制及场景的实时驱动实现方式做了详细的阐述。三维模型的实时真实画面应用于模拟训练,将会最大限度的贴近真实目标,大大提高操作手接近实战条件下的跟踪训练效果。
参 考 文 献
[1] 胡涛,李阔,视景仿真技术应用研究,光电技术应用,2004,Vol.19,No.3.
[2] 万斌等. Visual C ++ OpenGL DirectX三维编程宝典[M] .北京:北京希望出版社,2003.
[3] 袁绪龙,张宇文等,基于OpenGL的弹道视景仿真系统设计,电脑与信息技术,2001.4.
[4] 何兆才,光学测量系统,国防工业出版社,1996.■