WinNT下Vega虚拟现实视景仿真软件的分析与设计
摘 要:针对在 Windows NT 平台上开发基于 Vega 的视景驱动软件中所遇到的问题,该文从面向对象的软件分析与设计、可复用面向对象的软件技术——设计模式以及 Windows 的核心机制等诸多方面进行了逐步的分析与设计,并最终给出了一种妥善的通用解决方案。
引 言
Vega 系统作为一种视景驱动软件平台,大量运用于虚拟现实及实时仿真的应用中。由于 Windows 平台的易用性及应用的需求,Vega 系统由 SGI UNIX 平台移植到 Windows NT 平台上,这大大方便了 Windows 开发人员开发出基于Vega 的各种应用。而另一方面也不可避免的导致在新的Windows NT 平台上开发基于 Vega 的视景驱动软件的过程中会遇到这样那样的问题,本文就在 Windows NT 平台上开发一个实时虚拟仿真系统中的视景驱动软件部分的过程中遇到的一些问题,从面向对象的软件分析与设计、可复用面向对象的软件技术——设计模式以及 Windows 的核心机制等诸多方面进行了逐步的分析与设计,并最终给出了一种妥善的解决方案。
1、实时虚拟仿真系统 FVSS 的总体结构
本文中所涉及的实时虚拟仿真系统FVSS是一个飞机飞行模拟的实时仿真系统,它的总体结构如图 1 所示。该系统将用户的输入通过仿真建模运算后,实时地在输出端给出三维可视化的仿真结果。
图 1 实时虚拟仿真系统FVSS 的总体结构
其中系统各个模块的主要功能为:
数据采集模块主要对用户的输入进行实时采集并进行数据格式转换,然后将转换后的数据传给系统建模模块作为输入。
系统建模部分是整个仿真系统的核心部分,它主要是对真实系统中内在关系的模型构造,它能根据用户的输入数据产生与真实系统等效功能或几乎等效的输出。该模块最后将运算得出的仿真结果传给视景驱动模块。
视景驱动模块则主要是将得到的仿真结果数据进行三维可视化的显示,它主要是在基于 Windows NT 的 Vega 系统平台上实现。本文以下将详细讨论的则仅限于这一部分的软件系统的分析与设计。
2 Vega 系统
2.1 Vega 简介
Vega 是一种用于实时仿真及虚拟现实应用的高性能软件环境和工具。它主要包括两个部分:一个是被称为 LynX的图形用户界面的工具箱,另一个则是基于 C 语言的 Vega函数调用库。LynX 的主要功能是通过可视化操作建立起三维场景模型,并将其存在一个应用定义文件(.ADF)中,而后应用程序就可以通过调用 Vega 的 C 语言函数库来对已建好的三维场景进行渲染驱动。由于 Vega 起初是作为在 SGIUNIX 平台上的一个产品,后来才移植到 Windows NT 平台户在 Windows 平台上进行应用开发时会遇到一些难以预料的问题,而 Vega 的开发指南上对这些问题也未有提及,本文以下部分对这些问题作了分析,并一步一步改进至最终得到一个妥善合理的方案。
2.2 Vega 应用程序主框架
对于 Windows NT 平台上的 Vega 应用,主要有三种类型:控制台程序、传统的 Windows 应用程序和基于MFC(Microsoft Foundation Classes)的应用。但无论是哪一种应用,建立 Vega 应用的三个必需的步骤为:
1) 初始化:这一步初始化 Vega 系统并创建共享内存以及信号量等;
2) 定义:通过.ADF 应用定义文件创建三维模型或是通过显式的函数调用来创建三维模型;
3) 配置:通过调用配置函数来完成配置设置完 Vega 系统后,就开始了 Vega 应用的主循环,主循环的作用是对三维视景进行渲染驱动。
它主要分两步:
1) 对于给定的帧速进行帧同步
2) 对当前的显示帧进行必要的处理
以下显示了一个最小的 Vega 应用程序[1]:
main()
{
vgInitSys(); //初始化
vgDefineSys(“myapp.adf”); //定义
vgConfigSys(); //配置
while(bContinuing)
{
vgSyncFrame(); //同步帧
vgFrame(); //帧内处理
//application specific code
}
}
3、Vega 应用的线程
这就是一个控制台的应用程序。既然是在 Windows 平台上开发,那么具有良好图形用户界面的应用程序将更受到欢迎。对于基于窗口的应用来说,Vega 系统通过提供一个窗口初始化函数调用来完成,即只要把上述的初始化函数vgInitSys()替换成 vgInitWinSys()即可。该函数通过获得窗口句柄来初始化 Vega 的显示窗口。3 基于 MFC 的 Vega 应用3.1 基于 MFC 的 Vega 应用的程序结构 考虑到 Vega函数是用 C 语言写的以及在 Windows 平台上进行开发,所以 VC 作为开发工具成为首选。在 VC 中的 MFC 类库[2]已是一个相当成熟的类库,特别是其基于文档/视结构的应用程序框架,已成为开发 Windows 应用程序的主流框架结构。