技术领域
[0001] 本
发明属于三维运动视景技术领域,其利用
信号处理、
计算机辅助设计技术、视景仿真技术和计算机仿真技术等实现仿真多种
船舶和
飞行器目标在不同
风向、风速等级和不同运行状态时的三维视景动画,仿真的视景动画效果能够直观且真实地反映设定的仿真参数对船舶和飞行器目标运动状态的影响,本发明涉及一种基于三维运动视景的仿真系统设计与实现方法。
背景技术
[0002] 传统的雷达仿真方法分析手段较为抽象,对于繁杂的数学公式和大量的数据,除了专业人员了解其真实情况外,一般的训练人员和决策者难以迅速准确地做出判断。李震,李积德,王庆.舰船三维运动视景仿真系统的设计[J].哈尔滨工程大学学报,2003,24(1):9-13.
[0003] 随着计算机
硬件和
计算机图形学的发展,科学计算
可视化已成为一
门独立的新兴学科。特别地,视景仿真技术以其灵活、通用、高效和低成本等特点在多领域得到了广泛应用。康凤举.舰船仿真技术发展综述[J].舰船
电子工程,2004,24(1):9-11.
[0004] 针对传统雷达仿真方法存在的问题,利用视景仿真技术建立具有真实物理属性的三维真实研究分析环境,用户借助必要的设备以自然的方式与
虚拟环境中的对象进行交互作用、相互影响,从而为系统研究人员、雷达训练人员和决策分析人员创造一个共享的视听环境,用共同的语言来研究、分析和探讨问题,使整个仿真过程变得看得见和听得到,使结果变得更加真实、可信。
发明内容
[0005] 针对
现有技术的不足,本发明要解决的技术问题是建立具有真实物理属性的三维真实研究分析环境,使系统研究人员、雷达训练人员和决策分析人员对整个仿真过程既有抽象的理性的定量分析,又有形象的感性的定性分析。
[0006] 本发明能够仿真出适用于船舶航行
水域环境和飞行器航行的天空环境下的三维运动视景动画,根据设定的船舶和飞行器目标的名称、类型、持续时间、经度、高度、纬度、
俯仰角、
偏航角、翻滚角、速度以及风向、风速等仿真数据,生成对应的船舶和飞行器目标在设定的水域和天空环境按既定的运动参数进行相应的状态更新画面。
[0007] 本发明的技术方案:
[0008] 为了实现基于三维运动视景的仿真系统设计,首先建立一个基于MFC单文档的OpenGL仿真系统
框架;然后建立由采用OpenGL纹理贴图方法绘制的地物模
块(树、山等)、天空模块、海洋模块和光照模块组成的环境系统;同时建立
坐标系统;再将利用计算机辅助设计技术生成的船舶和飞行器目标的三维模型载入构建好的程序框架中;并通过实时通讯,读取外部的驱动数据,实现目标的状态更新;建立的视角转换系统,可通过
键盘交互,实现不同的观测效果;最后利用OpenGL双缓存技术实现平滑的动画,通过数据显示系统显示目标信息。
[0009] 本发明采用的技术方案如下:
[0010] 第一步:建立OpenGL仿真系统框架
[0011] 在
操作系统下,建立一个基于MFC单文档的OpenGL图形程序框架,具体步骤为:
[0012] 1.1利用“MFC应用程序”选择“应用程序类型:单个文档”创建基于MFC单文档的工程;
[0013] 1.2在已创建好的工程中添加OpenGL库文件和头文件,完成初始化设置;
[0014] 1.3调用OpenGL相关命令进行图形绘制;
[0015] 1.4退出OpenGL绘图窗口,同时释放OpenGL绘制描述表和Windows设备描述表。
[0016] 第二步:建立环境系统模型
[0017] 环境系统包括地物模块(树、山等)、天空模块、海洋模块和光照模块。各模块采用OpenGL的纹理贴图方法进行绘制,即通过读取外部的图像文件,采用纹理映射的方法进行贴图。在海洋模块中,为接近真实效果的
海水起伏以及海面明暗变化,运用基于快速傅里叶变换生成动态的海面高度场,其中,海面的高度被看成一个由
位置X=(x,z)和时间t组成的随机变量h(X,t), 与海浪谱相关且满足 本仿真方法采用Phillips海浪谱,将海面高度场存入到
顶点纹理中,同时采用多块网格无缝拼接形成无限海面,然后通过取顶点纹理的值对网格进行扰动,实现动态的海面效果。
[0018] 第三步:建立坐标系统
[0019] 本仿真系统在数据结构和程序实现上需建立一个窗口二维坐标系和两个三维坐标系,两个三维坐标系为OpenGL坐标系及目标坐标系。
[0020] 第四步:建立目标系统
[0021] 4.1建立船舶和飞行器目标的三维模型:搜集关于所建模型的几何结构信息,通过相关专业杂志和网络资源提供的设计图以及现场实拍的真实图片,根据所获取的目标模型的具体信息,利用3DS Max建模工具按比例绘制出真实模型并加以纹理贴图和光照效果的
渲染;
[0022] 4.2载入船舶和飞行器目标的三维模型:采用文件读入的方式将绘制的三维模型载入程序框架;具体步骤为:
[0023] 4.2.1生成3DS文件,利用3DS Max
软件将绘制的三维模型导出为3DS文件;
[0024] 4.2.2编写读取3DS文件的VC++程序,即头文件“Read3DS.h”和源文件“Read3DS.cpp”;
[0025] 4.2.3载入工程,在构建好的程序框架中,包含头文件“Read3DS.h”,调用函数读取目录下的3DS文件,完成三维模型的载入,并可在工程中对载入模型进行对象管理。
[0026] 4.3船舶和飞行器目标的数据驱动:
[0027] 本仿真系统通过读取外部的驱动数据实现船舶和飞行器目标的实时状态更新,驱动数据包括船舶和飞行器目标的名称、类型、持续时间、经度、高度、纬度、俯仰角、偏航角、翻滚角和速度等数据。其中经度、高度及纬度坐标需以OpenGL坐标系为基准,对经度、高度及纬度坐标数据进行相应转换。
[0028] 船舶和飞行器目标的实时状态包括位置和
姿态,位置由OpenGL坐标系X,Y,Z的三个坐标值来确定,姿态包括俯仰角、偏航角及翻滚角。以OpenGL坐标系为基准,沿OpenGL坐标系的X,Y,Z三个坐标轴平移实现目标的位置变换;以OpenGL坐标系为基准,沿OpenGL坐标系的X,Y,Z三个坐标轴旋转实现目标的姿态变换,目标的俯仰变换为绕X轴旋转,目标的偏航变换为绕Y轴旋转,目标的翻滚变换为绕Z轴旋转。
[0029] 目标的实时状态控制由OpenGL中的模型转换函数(glTranslatef()和glRotatef())完成,在绘制目标前调用相应的转换函数,通过不断地改变三个坐标值和各角度值,实现目标的实时状态更新。
[0030] 第五步:建立视角转换系统
[0031] 本仿真系统共定义了2种视点,分别是
跟踪视点和固定视点。跟踪视点是将相机位置设置于目标附近,与目标距离的远近参数可以调用SetCamera()来设置,视点会随目标的运动而移动。固定视点是将相机固定在某一具体三维坐标上,用于实现固定点的观测效果,处于固定视点时,通过键盘交互,系统会有三个不同程度的缩放效果,人为设定视角度数,缩放的效果可以使用OpenGL中的透视投影函数gluPerspective()来实现。
[0032] 第六步:三维运动视景系统实现
[0033] 本仿真系统采用OpenGL双缓存技术,OpenGL利用glutSwapBuffers()函数来交换双缓存,如此循环反复,实现平滑的动画,并通过据显示系统显示必要的目标信息。
[0034] 系统利用响应定时中断来为船舶和飞行器目标更新状态数据,使船舶和飞行器目标每隔一定的时间(用户可设定)读取一次状态数据,随着状态数据的不断更新,目标的实时状态也在不断地发生变化,最终实现目标的模拟运动。
[0035] 本发明可以通过实时通讯,实时读取驱动数据,完成三维模型状态的实时绘制,实现不同的视景变换;可以将目标状态仿真数据进行一次性存储,通过读取仿真数据进行三维可视化验证。
[0036] 本发明根据已设定的船舶和飞行器目标的名称、类型、持续时间、经度、高度、纬度、俯仰角、偏航角、翻滚角、速度以及风向、风速等仿真数据,可成对应的船舶和飞行器目标在设定的水域、天空环境和既定运动参数下的状态画面,为系统研究人员、雷达训练人员和决策分析人员创造一个共享的视听环境,使整个仿真过程变得看得见、摸得着,使结果变得更加真实、可信。
附图说明
[0037] 图1是基于三维运动视景仿真系统的总体设计
框图。
[0038] 图2是采用OpenGL纹理贴图方法绘制完成的环境系统。
[0039] 图3是基于三维运动视景仿真系统的坐标系统。
[0040] 图3(a)是窗口坐标系。
[0041] 图3(b)是OpenGL坐标系。
[0042] 图3(c)是目标坐标系。
[0043] 图4是使用3DS Max软件绘制完成的船舶模型。
[0044] 图5是载入单个模型及外部状态数据后的视景仿真画面(固定视点状态下视角度数为30°,包含数据显示)。
[0045] 图6是载入多个模型及外部状态数据后的视景仿真画面(固定视点状态下视角度数为90°,包含数据显示,但不能显示模型名称及类型)。
具体实施方式
[0046] 1)在Windows 7操作系统下,利用Visual Studio 2010建立一个基于MFC单文档的OpenGL仿真系统框架,以下步骤为使用Visual Studio 2010建立仿真系统框架的操作步骤:
[0047] 1、利用“MFC应用程序”选择“应用程序类型:单个文档”创建基于MFC单文档的工程;
[0048] 2、在已创建好的工程中添加OpenGL库文件和头文件,完成初始化设置;
[0049] 3、调用OpenGL相关命令进行图形绘制;
[0050] 4、退出OpenGL绘图窗口,同时释放OpenGL绘制描述表和Windows设备描述表。
[0051] 2)通过读取外部的图像文件,采用OpenGL的纹理贴图方法绘制地物模块(树、山等)、天空模块、海洋模块和光照模块,构建环境系统。其中,在海洋模块中,为接近真实效果的海水起伏以及海面明暗变化,运用基于快速傅里叶变换生成动态的海面高度场(海面的高度被看成一个由位置X=(x,z)和时间t组成的随机变量h(X,t),且其中 与海浪谱息息相关,本仿真方法采用的是Phillips谱),并将海水高度场存入到顶点纹理中,同时采用多块网格无缝拼接形成无限海面,然后通过取顶点纹理的值对网格进行扰动,实现动态的海面效果。
[0052] 3)建立坐标系统,本仿真系统采用的坐标系统可参考
说明书附图图3。
[0053] 4)再建立目标系统,以下步骤为建立目标系统的具体步骤:
[0054] 1、采用计算机辅助设计软件如3DS Max的系列设计软件船舶和飞行器目标的三维模型,目标的详细资料可以通过杂志、网络资源以及现场实拍照片获取,按比例绘制出真实模型并加以纹理贴图和光照效果的渲染;
[0055] 2、生成3DS文件,利用3DS Max软件将绘制的三维模型导出为3DS文件[0056] 3、编写读取3DS文件的VC++程序,即头文件“Read3DS.h”和源文件“Read3DS.cpp”;
[0057] 4、载入工程,在构建好的程序框架中,包含头文件“Read3DS.h”,调用函数读取目录下的3DS文件,完成三维模型的载入,并可在工程中对载入模型进行对象管理。
[0058] 5、读取外部的驱动数据实现船舶和飞行器目标的实时状态更新,驱动数据包括船舶和飞行器目标的名称、类型、持续时间、经度、高度、纬度、俯仰角、偏航角、翻滚角和速度等数据。其中经度、高度及纬度坐标需以OpenGL坐标系为基准,对经度、高度及纬度坐标数据进行相应转换。
[0059] 6、目标的实时状态控制由OpenGL中的模型转换函数glTranslatef()和glRotatef()完成,以OpenGL坐标系为基准,目标的位置变换,即沿OpenGL坐标系的X,Y,Z三个坐标轴进行平移;以OpenGL坐标系为基准,目标的姿态变换,即沿OpenGL坐标系的X,Y,Z三个坐标轴进行旋转,目标的俯仰变换为绕X轴旋转,目标的偏航变换为绕Y轴旋转,目标的翻滚变换为绕Z轴旋转。在绘制目标前调用相应的转换函数,通过不断地改变三个坐标值和各角度值,实现目标的实时状态更新。
[0060] 5)本仿真系统默认视点是固定视点,视角度数是30°,可通过键盘交互,改变视点模式和视角度数,主要是调用OpenGL中的透视投影函数gluPerspective(),来实现不同的观测效果。
[0061] 6)采用OpenGL双缓存技术,利用glutSwapBuffers()函数来交换双缓存,如此循环反复,实现平滑的动画。系统利用响应定时中断来为船舶和飞行器目标更新状态数据,使船舶和飞行器目标每隔一定的时间(用户可设定)读取一次状态数据,随着状态数据的不断更新,目标的实时状态也在不断地发生变化,最终实现目标的模拟运动,并通过数据显示系统可以显示必要的目标信息。