程乃伟+李想+蒋波沱+董宇佳+黄辉
摘 要:采用基于Vega Prime的三维仿真技术,结合MFC在单文档程序框架下利用定时器的方式,通过实例模拟火灾现场,实现多视角的相互切换,并可应用于进一步的仿真模拟中,达到全方位观测事故现场的目的。
关键词:Vega Prime;视角切换;文档视图;应急救援
DOI:10.16640/j.cnki.37-1222/t.2015.24.026
1 引言
随着虚拟现实技术的发展,视景仿真模拟技术正与越来越多的技术领域相结合。基于Vega Prime的仿真模拟技术可实现对火灾现场应急救援工作的再现,有助于查明事故发生原因,找到事故的因果关系。本文利用Vega Prime仿真模拟技术在MFC单文档框架下,实现界面上的多视角仿真的同步切换,再现火灾事故现场为事故调查分析提供清晰的画面感。
2 火灾应急救援场景模拟及视角切换的实现
2.1 MFC客户区的视图分割
用户界面作为系统与用户之间直接交互手段,可应用MFC实现可视化界面。窗口视图分割可以使程序的功能分区更加明确,在MFC中提供了CSplitterWnd类,可以方便地实现窗口分割。其有两种使用方法,一是调用Create成员函数可创建动态分割窗口,另一种是调用CreateStatic成员函数进行创建静态的分割窗口。
由于本例中只需创建静态分割窗口即可,所以需要调用CreateView类为静态分割的窗口创建视图,并在参数中指明新视图的行列序号,类名称,新视图的起始大小以及创建视图的上下文指针。
在分割视图前需对整个程序界面进行初步设计,分为VP场景显示区、信息显示区、功能按键区。其具体过程为:(1)在CMainFrame中定义CSplitterWnd对象(2)重载框架类虚函数OnCreateClient(3)在OnCreateClient中用CSplitterWnd对象调用CreatStatic将窗口分割为2行1列,再调用CreatView创建CMyVPView类和CMyEditView类分别用于显示场景和文字状态显示。(4)创建一个对话框资源,设置其风格为Child,无边框,为其添加新类,选择基类为CDialogBar,并在CMainFrame中添加变量,调用Create函数,这样就已将对话框以工具条的形式镶嵌在框架上。
2.2 视图窗口中显示Vega Prime的场景
Vega Prime 应用程序的基本运行流程是:初始化VP,定义ACF,配置ACF, 运行帧循环以及最后退出帧循环。基于MFC的Vega Prime程序在对话框和单文档内均可实现,其运行方式即可基于线程,也可基于定时器。
本例中采用基于定时器的单文档程序运行Vega Prime。其过程为:(1)在CMyVPView类WM_CREATE消息响应函数中对VP进行初始化、设置ACF文件、加载ACF文件、设置父窗口、调用beginFrame/endFrame 打开Vega Prime 窗口、设置定时器用来更新场景。(2)在WM_TIMER消息响应函数中运行帧循环,按设置的好的帧数更新VP场景。(3)在WM_SIZE响应函数设置窗口大小,可动态调整。(4)重载虚函数OnActivateView设置VP窗口为输入焦点(5)最后在CMyVPView类的析构函数中关闭VP,退出帧循环。
2.3 场景的视角切换
Vega Prime中各类实例之间有着清晰的层次关系,根据实例树图可知其顺序为:管道vpPipeline→窗口vpWindow→通道vpChannel→观察者vpObserver→场景vpScene→对象vpObject→转换vpTransform等。
在视角切换的过程中,关键环节为观察者的设置,由于场景的通道配置与观察者关系通常固定不变,对象与转换间的关系也相对固定,因此,将动态配置观察者的观察目标与观察点成为了问题的关键。作为观察者vpObserver目标的不仅有对象vpObject,也可以是对象的转换vpTransform,这就便于在观察者以更佳的角度进行观测目标,对于个别对象将观察者观察点设置为其转换坐标既可以观察其自身的状态、动作,又可以观察其对场景中其他对象、环境的影响。
本例设计一个通道为主观察通道,三个副观察通道,可随时随意将三个副观察通道的场景载入到主观察通道中,所以首先为VP的窗口分配了四个通道,分别为ambulanceChannel(AC)、towerChannel(TC)、firetruckChannel(FC)、mainChannel(MC)。其中AC作为救护车视角专用通道,TC作为塔高视角专用通道,FC作为消防车视角专用通道,MC作为切换视角的预留通道,可设置其默认通道为TC。
然后为四个通道分别配置观察者:ambulanceObserver(AO)、towerObserver(TO)、firetruckObserver(FO)、mainObserver(MO)。为实现通道显示不同的场景只需对其观察者进行动态配置,由于AO、TO、FO在程序运行中不做变化,所以只对MO进行动态配置即可。在MO配置页面中,可设置Look At Target和Look From Target来设置观察者的目标观察物和观察点,同理在MFC程序可通过Button控件的响应函数来动态设置MO的目标观察物和观察点。
其过程如下:(1)对观察者目标指针、相关观察物与观察点进行静态化改造;(2)在相应的控件响应函数中,用观察者指针调用setLookAt和setLookFrom并根据需求设置参数;(3)用内核实例调用beginFrame和endFrame对场景进行刷新;(4)格式化相应文本信息字符串,调用SetWindowText显示文本信息。
3 总结
Vega Prime视角切换方法,可运用于火灾现场应急救援的模拟过程及各种视景仿真开发的基础功能。基于MFC的Vega Prime程序的操作更加灵活,一定程度上简化了用户的操作,本文范例程序具有良好通用性、实用性和可扩展性,为后续开发提供支持。
作者简介:程乃伟(1960-),男,辽宁沈阳人,硕士,教授,硕士生导师,研究方向:信息化安全技术。endprint