虚拟现实(Virtual Reality,简称VR)技术是以仿真的方式给用户创造一个实时反映实体变化与相互作用的三维界面,使用户可直接参与并探索仿真对象在所处环境中的作用与变化,它具有多媒体信息感知性、沉浸性、交互性和自主性等特点。基于虚拟环境的模拟训练系统是当今计算机技术的热点之一。它通过计算机生成看起来、听起来、触摸起来像真的虚拟世界,给用户身临其境的沉浸感,能通过立体眼镜和数据手套等设备让用户与虚拟环境进行直接交互,获得类似于在现实中操作的体验[1]。
由于利用虚拟仿真技术,在计算机上就可以进行反复多次的模拟实验,以取代耗资巨大的物理和实物实验,甚至可以进行各种原因和条件限制而无法实现的实验,具有投资少、效益高、无风险、可重复、周期短等突出的优点,被迅速推广,特别是在各种操作培训方面,起到了尤为突出的作用。
本文依托的是某型潜艇航海训练模拟器中的潜望镜视景系统研究,该视景系统运用虚拟现实技术,通过在计算机上生成具有一定真实感的视景,模拟潜望镜视景中的海洋环境,从而可以使受训人员产生强烈的沉浸感,改善训练效果,解决常规的海上训练经费高、周期长、风险大等问题。
整个潜望镜视景系统的构建采用半实物仿真,操作者可以通过潜望镜的物理仿真平台进行交互操作,物理仿真平台接收的输入信号经过信号处理和通讯系统输入到视景系统,视景系统实时更新画面显示来展现整个海域的海况。
潜望镜视景系统的构建框架如图1所示。
图1 潜望镜视景系统构建框架
系统的开发采用了美国MultiGen-Paradigm公司开发的Creator和Vega[2,3],以及C语言开发环境VC++6.0。为使模拟器能为艇员提供逼真的训练环境,首先运用Creator完成海区地形以及海上目标的建模,创建具有逼真效果的潜艇外部三维造型和艇外海洋环境,包括敌我双方的舰艇以及海面航行可辨识的目标。对于复杂物体的建模可以结合其他商业软件如3DS和CAD等来实现,一些表现度要求不高的模型,如场景中的树木和航标灯等可以结合Creator的布告板技术来进行简化,最后结合实际物体的照片,运用纹理映射来生成逼真的场景和物体。
然后通过Vega调用模型并驱动,用Lynx建立应用程序定义文件(.adf)。通过Vega提供的模块来模拟海浪和音响以及海面的特殊效果,增强仿真的真实度。
在C、C++或VC++语言平台上利用Vega的API和软件库调入已建立的ADF文件及三维模型对程序进行初始化,编制代码响应用户输入并动态地改变程序的运行,最终完成自己的虚拟现实应用程序编程。
最后,对应用程序进行编译链接,开发可以脱离Vega和VC环境的独立程序,并对输入设备进行联调,实现系统的集成。
Creator是专门针对可视化仿真行业应用特点推出的实时可视化三维建模软件系统。该软件支持大规模场景和地形的建模,且支持通过其他商业软件如3DS和CAD等建立模型,再导入Creator转换成其支持的OpenFlight(.flt)格式。针对虚拟现实的实时性要求,Creator采用了多种简化技术,如复杂物体的纹理技术(texture mapping),即应用纹理来代替实体模型中的细节,提高逼真度和显示速度。实例化技术(Instance),对于在海洋环境中多次出现的物体模型,如海面航标灯、民用船只等,采用相同的实体只在内存中放置1份,其余的实体显示通过旋转、平移和缩放等方式来放置。在较复杂的物体建模方面,采用LOD(Level of Detail)技术,不同的观察距离显示的细节层次也不同,图2和图3是在不同LOD层级下的驱逐舰模型。
图2 高LOD层级显示
图3 低LOD层级显示
Vega是1套完整的交互式开发、可视化仿真软件平台,它提供了一系列的模块来实现场景的驱动、控制和管理,并能方便地实现大量特殊效果和声音效果。在虚拟海洋环境中,海浪以及海洋特效是系统的重要组成部分,其逼真度直接影响到整个系统的真实度。
Vega中的海洋特效模块提供了3个控制面板:海洋面板(Oceans Panel),场地向量面板(Field Vectors Panel)海洋特效面板(Marine Effects Panel)。海洋面板提供了用来生成动态和静态海洋的参数,包括波浪的纹理、海况参数、海况定义以及添加的海洋特效。在海洋特效面板中,可以通过简单的设置来模拟真实海洋环境的动态可视化效果,海洋特效对于航海模拟器的真实度有很大的效果,可以增强人的沉浸感。模块提供的特效包括船尾流、船首浪花、海面的漩涡和浪端的白沫等[4]。
Vega海洋模块可以模拟动态海浪和海面特效,海洋的仿真是在观察者的周围生成一个动态的海面,可以设定动态海面的半径,而在此范围之外,则是静态的海洋模块。
Vega提供了3种海浪的仿真模式,2D模拟、3D正弦曲线模拟和3D次摆线模拟[5,6],对于2D和3D正弦曲线海洋模拟而言,动态的海洋是1个由10个以上的正弦波叠加的波场中的多边形的近似叠加,3D次摆线动态海洋运用次摆线替代正弦线,但是数据的定义和前面两者一样。对于3D正弦模拟,以下是其定义的方式:
for(j=0; j<10;j++)//对10个随机正弦波的定义
{
omglist[j] = 2.5f * (j + 1.0f); /*omglist, 频率*/
anglist[j] = 0.6283 * j;/* anglist,相位偏移*/
hlist[j] = 6.283 -0.6283 * j;/* hlist,航向偏差*/
amplist[j] = (j + 1) * 0.1f; /* amplist,振幅*/
}
vgOceanWave( ocean, 10, omglist, anglist, hlist, amplist);//定义海浪,将参数应用到海浪模块中
图4是运用3D正弦定义的大风浪海面仿真效果。
图4 3D正弦定义的大风浪海面效果
在VC环境下有3种较为典型的Vega应用程序开发模式:控制台程序、传统的Windows应用程序和基于MFC的应用[7,8]。
MFC作为比较流行的面向对象编程工具,可以开发出功能强大、运行效率高、重用性好及可扩展的开放式系统。利用MFC应用程序中的菜单、对话框等资源,可以改变Vega应用程序的外观,使之更加符合Windows操作系统用户的习惯,使用Visual C++ 6.0产生标准的基于MFC的程序,并将1个Vega窗口植入到基于MFC的程序中,这是将标准的Windows用户接口组件与Vega应用程序融合的较好方法。
基于MFC的程序开发主要有以下3个步骤:第一步,初始化,调用vgInitSys函数初始化系统并创建共享的内存区和信号区。第二步,定义,通过创建需要的事件和需要的类来定义系统。第三步,系统配置,使ADF中的定义与函数调用结合起来,最后,调用vgConfigSys函数完成步骤。Vega应用程序的主循环包括vgSyncFrame和vgFrame函数的调用,通常由每个仿真循环或者每次需要一个新的显示时调用这些函数。
Vega系统需要进行实时的循环渲染,是一个非常耗时的工作,需要为之创建一个线程。通过线程的全局函数runVegaApp来实现初始化、定义和系统配置。与传统的编程不同,这里的vgInitSys函数由vgInitWinSys代替。然后,通过MFC全局函数AfxBeginThread来创建工作线程,其代码放置在runVegaApp函数中,当调用runVegaApp函数时就创建该线程并通过此函数获取ADF文件的类实例。其工作流程如图5所示。
图5 仿真程序工作流程图
创建线程的部分代码[5,6]如下:
UINT runVegaApp(LPVOID pParam){
CVegaView* pOwner=(CVegaView*)pParam;
vgInitWinSys(AfxGetInstanceHandle(),
pOwner->GetSafeHwnd());
pOwner->setVegaInitted(TRUE);
pOwner->postInit();
vgInitFx();/*初始化特效模块*/
vgInitMarine(); /*初始化海洋模块*/
vgDefineSys(pOwner->getAdfName());
pOwner->setVegaDefined(TRUE);
pOwner->postDefine();
vgConfigSys();
pOwner->setVegaConfiged(TRUE);
pOwner->postConfig();
while(pOwner->getContinueRunning()){
vgSyncFrame();
pOwner->postSync();
vgFrame();
pOwner->postFrame();}
pOwner->setVegaInitted(FALSE);
vgExit(0);
return 0;}
MFC自动生成的派生自CView的CvegaView类可以作为基于MFC的Vega应用程序的视图基类来派生其他的类,也可以直接把一些基本的工作放在这个类当中完成,通过添加及修改其中原有的函数,实现自己需要的交互式系统。
添加运行Vega的成员变量和成员函数,定义的成员变量主要用来控制和修改Vega中的各个类参数值,如定义指向object物体、scene场景、chan通道的指针等,通过添加的成员函数获得和设置系统的配置和状态值。然后利用MFC应用程序中的菜单、对话框等资源,改变Vega应用程序的外观,同时利用vegaAPI增强应用程序的功能,可以实现通过外部设备的交互控制。最后,通过编译可以生成脱离Vega和VC++环境的程序,并将系统的软硬件进行互联,实现视景系统的集成。
该仿真初步建立了某型潜艇航海训练器中潜望镜视景仿真系统的视景环境,生成了近似实战的虚拟海洋环境,并实现了视景环境中的驱动、控制模型,生成了逼真的航行轨迹和环境效果,为受训者提供了交互式的仿真环境,实现了受训者与仿真环境的自然交互,具有很高的逼真度,达到了预期的效果。
系统具有以下特点:
• 三维图形质量高:由于采用实体造型、光照、纹理等特殊图像处理效果,使得仿真图形具有较好的三维真实感。能真实地反应海洋环境和海面目标。
• 高实时性:视景系统中采用了针对虚拟现实实时性要求的简化建模和调度算法,可以完成对操作者输入的实时处理。
• 良好的交互性:艇员可以通过潜望镜物理仿真装置、大屏幕等与虚拟环境进行交互,具有很好的交互性。
图6是笔者实现的MFC程序界面,图7为潜艇水面航行效果图。
图6 基于MFC的程序界面
图7 潜艇水面航行效果
本文介绍了虚拟仿真软件Creator和Vega,结合潜艇航海训练的要求,研究并提出了基于VR的潜艇航海训练模拟器的设计方案,给出了在Vega环境下开发潜望镜视景软件的设计方法和开发流程,完成了基于MFC和Vega的潜望镜视景仿真程序的开发,并给出了程序的基本框架。在潜艇的航海训练模拟器中,我们采用了虚拟现实的最新技术,并结合艇员的实际训练要求,建立了艇员训练的虚拟现实系统。本模拟器已完成了初步的设计和研制工作,随着计算机技术及虚拟现实技术的进一步发展,将运用更多更好的设计方法运用到本模拟器的开发研制中来,使之更加完善。基于虚拟现实的潜艇训练模拟器对解决常规训练中的高投入、高风险、长周期等有重要的实际意义,且能提供虚拟化的视觉效果,增强艇员训练的实效,相信在以后会得到更广泛的应用。
[1] 汪成为,高文,王行仁.灵镜虚拟现实技术的理论实现及应用[M].北京:清华大学出版社,1996.
[2] 杨丽,李光耀.城市仿真应用工具——Vega软件教程[M].上海:同济大学出版社,2007.
[3] 王乘,周均清,李利军.Creator可视化仿真建模技术[M].武汉:华中科技大学出版社,2005.
[4] 任亮,龙建忠,李华.三维航迹的仿真数学模型及其在Vega环境中的实现[J].计算机仿真,2006,23(3):58-60.
[5] MultiGen Paradigm Inc. Lynx user′s guide [M].Dallas.MultiGen Paradigm Inc,2001.
[6] MultiGen Paradigm Inc. Vega programmer′s guide [M].Dallas,MultiGen Paradigm Inc,2001.
[7] 杨平利.在Vega环境下开发虚拟现实应用程序[J].计算机仿真, 2005, 22(5):165-168.
[8] 胡少军,何东健,汪有科,等.OpenGL与Creator/Vega 结合的渠系仿真优化设计[J].系统仿真学报,2007,19(5):1157-1160.