我的订单|我的收藏|我的商城|帮助中心|返回首页
虚拟现实新闻>VR>行业资讯>行业知识

基于MFC/ Vega 的炮兵行动在线仿真系统 设计与实现

文章来源:第三维度 作者: 发布时间:2014年12月06日 点击数: 字号:

    来源:第三维度    作者:陈永科,李岩,杨艾军    编审:刘家军(研究员)    单位:安徽合肥炮兵学院          海军大连舰艇学院 
   摘要:基于 MFC 的 Vega 视景开发是实现在线仿真的有效途径。本文首先分析了一般在线仿真系统的基本构成 ;其次 ,结合炮兵行动具体实现 ,提出炮兵作战行动在线仿真系统的详细设计过程 ,并给出其总体设计流程 ;最后 ,对基于 MFC 的 Vega 驱动视景开发的应用程序框架及有关的行动模块进行了实现。
    1 引  言
    根据仿真所产生的现象在计算中的不同形成过程 ,仿真可分为离线仿真和在线仿真两种。其中 ,在线仿真可使用户交互地改变仿真过程中的参数 ,给用户以身临其境的感觉 ,达到控制仿真行为的目的 ,在作战模拟与仿真、武器装备论证、作战方案评估等军事活动中具有重要技术支持。利用 Vega 软件是实现在线仿真的较好工具 ,它能够实现由用户控制交互作战的仿真系统。Vega 是一种用于实时仿真及虚拟现实应用的高性能软件环境和工具。Vega 中最核心的渲染环境 (用于实时视觉模拟的定义和视景的描述) 是虚拟现实和变通视觉应用的开发和运行工具。对于 Windows 平台上的 Vega 开发应用 ,主要有三种类型 :
    控制台程序(console) 、传统的 Windows 应用程序和基于 MFC(Microsoft Foundation Classes) 的应用。Vega函数是用 C + + 语言写的 ,并在 Windows 平台上进行开发的 ,它包括完整的 C 语言应用程序接口 API ,所以第三种类型成为首选。MFC 作为比较流行的面向对象编程工具 ,可以开发出功能强大、运行效率高、重用性好及可扩展的开放式系统。
    2 在线仿真系统
    一般地 ,在线仿真系统分为三个部分 :视觉模型、图形用户界面和仿真控制/ 求解器。如图 1 所示。图形用户界面的目的是产生仿真用户和仿真控制器之间的可视化交互界面 ,完成参数的输入 ,控制视觉模型的产生形式 ,并控制仿真实施过程。视觉模型是将数学模型和计算机模型的结果以某种形式(表格、图像和动画) 表达 ,以主要完成仿真行为的描述 ,其中可视化的动画仿真是仿真人员较易接受的表达形式。仿真控制/ 求解器根据仿真命令或事件控制仿真行为。仿真求解器能实时地响应用户的控制 ,对诸如动力学物理模型进行仿真。仿真控制器实现与图形用户界面间的联系 ,接受仿真控制请求 ,通过求解器来改变视觉模型。

图1在线仿真系统组成
    3 炮兵行动在线仿真设计流程
    炮兵行动在线仿真设计是项复杂的系统工程 ,技术层次涉及到各个独立的实体模型、虚拟战场场景模型、仿真环境生成、通道设置、图形状态设置、观察者设置、光源设置、实体运动方式设置 ,以及碰撞检测、环境效果和特效等内容 ,知识层次涉及到战术学、运筹学、计算机仿真、计算机网络、工程数学和人工智能等知识 ,无论从技术支持和理论知识来讲 ,都是值得深入研究的。
    根据军事系统设计、在线仿真过程、Vega 设计流程以及 Visual C + + 开发的一般过程 ,炮兵作战行动在线仿真系统的设计过程总体上可分为四个部分 :首先 ,进行战术层次的设计 ,如作战想定 ,行动战术规则等 ;其次 ,进行建模层次设计 ,运用实体建模系统(Multigen Creator) 建立炮兵实体模型。利用地形生成系统(CTS) 建立三维战场模型。再次 ,仿真环境层次设计 ,进行利用 Vega 的 Lynx 应用程序将所建炮兵实体模型调入仿真环境 ,并生成程序定义文件 (adf) ,并设置相应参数。最后 ,在线仿真开发层次的设计 ,在MFC 开发环境中 ,通过对 Vega 系统函数和窗口函数的访问 ,对 Vega 应用程序提供过程(adf 文件) 实时控制 ,开发出基于单机、DIS 或 HLA 运行机制的 Vega 应用程序。炮兵作战行动在线仿真系统的详细设计过程如表 1 所示。
表1 炮兵行动在线仿真设计流程

    在表1 中 ,炮兵的行动数学模型包括炮兵在战场中的基本行动 ,如机动、射击、爆炸等 ,这样就需要建立相应的机动模型、射击模型来驱动虚拟场景中的炮兵实体的行动仿真。
    实体模型工具采用的是 Multigen Creator ,它使用统一的图形数据描述格式 Open Flight 描述模型 ,在建模层次与 Vega 结合较好。Vega 主要包括两个部分 :一个是被称为 LynX 的图形用户界面的工具箱 ,另一个则是基于 C 语言的 Vega API 函数调用库。LynX 的主要功能是通过可视化操作建立起三维场景模型 ,并将其存在一个程序定义文件(. ADF) 中 ,尔后应用程序就可以通过调用 Vega 的 C 语言函数库来对已建好的三维场景进行渲染驱动。仿真环境层次中的 Lynx 工具和在线仿真开发层次中的 Vega API 就是进行三维场景模型和虚拟场景渲染驱动的作用。
    在线仿真开发层次中 ,主要讨论如何实现 vega 程序在 Visual C + + 中的设计。采用 Vega 和 Visual C+ + 6. 0 作为炮兵作战在线仿真的软件平台 ,从仿真设计(如图 1) 的角度 ,系统的总体结构如图 2 所示。

图 2 炮兵行动在线仿真系统总体结构
    在图2 中 ,用户是指炮兵行动仿真系统中设置的部位或席位 ,图形用户界面用于仿真用户与系统的双向交互 ,可完成兵力编制、武器装备性能、战场环境等初始数据的输入 ,同时控制视觉模型的产生的虚拟战场态势。在线仿真过程中 ,指挥员根据一定的作战原则和战术规则 ,指挥当前的炮兵实体完成作战对抗。
    正在执行任务的炮兵仿真实体根据所担负的作战行动 ,适时地进行机动、射击等动作 ,经过相关的计算机模块运算后 ,对兵力的状态做出调整。当前的活动实体和实体的状态改变的仿真 ,要经过 Vega 程序驱动 ,最终完成在虚拟战场环境中的炮兵行动仿真 ,并传输到图形用户界面 ,这是基于 Visual C + + / Vega 开发炮兵在线仿真的关键所在。
    4 基于 MFC/ Vega 炮兵行动系统作战实例
    使用 Visual C + + 6. 0 产生标准的基于 MFC 程序 ,并将一个 Vega 窗口植入到基于 MFC 的程序中 ,这是将标准的 Windows 用户接口组件与 Vega 应用程序融合的较好方法。基于 Vega 的 MFC 程序开发要用到专门的 Vega 类和 Vega API 函数 ,下面讨论过程中出现的 Vega 类或函数的意义及用法。
    4. 1 MFC/ Vega 应用程序框架设计
    基于 Vega 的 MFC 应用程序分三个主要步骤 :初始化、定义和系统配置。初始化就是调用 vgInitSys函数初始化系统 ,并创建共享的内存区和信号区。定义就是创建需要的事件和需要的类来定义系统。较便捷的方法是直接利用 Lynx 生成 adf 文件 ,由 vgDefineSys 函数调用。也可调用外部函数创建 Vega 类事件。系统配置就是使 ADF 文件的定义与函数调用结合起来 ,由 vgConfigSys 函数完成。
    基于 MFC/ Vega 的视景仿真应用程序开发 ,实质上是将 Vega 着色放进 MFC 的 View 窗口中进行。当前有二种可实现 View 窗口的 Vega 驱动 :一是直接继承 MFC 中的 CView 类 ,称为直接继承模式 ;二是通过继承 MFC 中的 CView 类而派生出一个子类 zsVegaView ,称为模板方法模式。这个 zsVegaView 类提供了启动一个 Vega 线程最基本的功能 ,还以虚函数的形式定义了特定的应用要进行操作的通用接口 ,因此用户的应用程序只需从 zsVegaView 派生出新类并根据需要重载必要的虚函数即可。
    直接继承模式和模板方法模式各有优长 ,并且作者都经过了应用。为便于说明 ,下面结合炮兵行动在线仿真 ,对模板方法模式进行简要说明。zsVegaView 由 CView 类派生 ,并封装了 Vega 特性的变量和函数和定义运行线程。在系统运行时 ,线程 runVegaApp () 的主要代码实现如下 :
    清单 1 :
      zsVegaView 3 pOwner = (zsVegaView 3 ) p Param ;  // 把 Vega 窗口加到 View 窗口中
        vgInitWinSys( Afx Get InstanceHandle () , pOwner - > GetSafeHwnd() ) ; / / 设定在 ArtilleryFight . adf 中指定的窗口
        vgDefineSys“( ArtilleryFight . adf”) ;// 将炮兵在线仿真程序窗口打开vgConfigSys() ;
        while ( pOwner - > getContinueRunning () ) {  // 请求炮兵在线仿真程序线程同步到一个给定的帧率上 ,执行系统回调  vgSyncFrame () ;
        pOwner - > postSync () ;   // 在当前帧下启动选择和绘制线程vgFrame () ;
        pOwner - > post Frame () ;。。。。。。}
    4. 2  炮兵行动控制模块
    根据炮兵行动在线仿真的总体结构 ,炮兵实体运动的仿真由 Vega 驱动完成。下面以炮兵实体模型的机动为例进行说明。其中键盘左/ 右箭头控制实体的左/ 右方向转动 ,上/ 下箭头控制实体模型的向前/向后机动 ,代码如下 :清单 2 :
        void CMyView : :On KeyDown (U IN T nChar , U IN T nRepCnt , U IN T nFlags) { 
        int posx ,posy ,posz ;  
        float posh ,posp ,posr ;
        vgPlayer 3 artilleryplayer ;
        artilleryplayer = vgFindPlyr(”Artillery- driver”) ;
        float velocity = 2 ;
        vgObject 3 obj ;
        vgPosition 3 pos ;
        obj = vgFindObj( ”Artillery1”) ;// 选择 Artillery1 实体
        if ( ! obj) return ;
         pos = vgNewPos() ;
       vg Get Pos(artilleryplayer , pos) ;
       vg Get PosVec (pos , &posx ,posy , &posz , &posh , &posp , &posr) ;
       switch ( nChar )
      {      case 37 :// V GWIN-L EFTARROW :向左转动 1 度
           posh + = 1. 0 ;
           break ;
     case 39 :// V GWIN- RIGHTARROW :向右转动 1 度
          posh - = 1. 0 ;
          break ;
     case 40 :// V GWIN-DOWNARROW :以速度 v 后退
          posy = posy - velocity 3 sin (dt) ;// dt 为 Artillery1 的机动角度
          posx = posx - velocity 3 cos(dt) ;
          break ;
     case 38 :// V GWIN- U PARROW :以速度 v 前进
          posy = posy + velocity 3 sin (dt) ;
          posx = posx + velocity 3 cos(dt) ;
          break ;
     default : break ;
     }
     vgPosVec ( pos ,posx ,posy , 0 ,posh ,0 ,0) ;
     vgPos ( obj , pos ) ;
     vgDelPos( pos ) ;
     vgUpdate (tankplayer) ;
     CView : :On KeyDown (nChar , nRepCnt , nFlags) ;
     }
    炮兵的射击仿真可通过单击鼠标来实现 ,在 Vega 驱动中主要由回调函数完成相应的仿真。此外 ,通过回调函数可实现屏幕上显示实体运动时当前位置 ,还可以实现控制爆炸效果、控制毁伤程度、碰撞检测等特效仿真。回调函数形式为 :
    vgAddFunc ( vgCommon 3 handle , int which , vgCallback 3 func , void 3 data ) ;
    回调函数可被加入到 vega 中 ,在指定事件发生时被调用 ,由用户定义 ,系统自动调用。
    5 结束语
    基于 MFC/ Vega 的炮兵行动在线仿真系统在技术上存在一定难度。如打开应用程序时 ,在不退出该应用的前提下进行三维场景切换等。但由于基于 MFC/ Vega 虚拟仿真的效果好、且对硬件要求适中、易于编程和灵活控制等优点 ,在实际的军事仿真中仍然具有不可替代的作用。
    参考文献
    1 张俊学 ,杨艾军 ,陈永科. 作战模拟理论与技术[ M ] . 北京 :解放军出版社 , 2002.
    2 龚卓蓉. Vega 程序设计[ M ] . 北京 :国防工业出版社 , 2002.
    3 吴家铸 ,等. 视景仿真技术及应用[ M ] . 西安 :西安电子科技大学出版社 , 2001.
    4 刘萍 ,陈永科. 面向对象的程序设计[ M ] . 合肥 :炮兵学院 , 2001.
    5 龚卓蓉. LynX 图形界面[ M ] . 北京 :国防工业出版社 , 2002.
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料
  • 暂无资料