基于Virtools的虚拟演示系统的设计【摘要】虚拟演示是近年来兴起的一个研究领域,有各种不同的开发工具。利用OpenGL和VRML技术开发的虚拟交互式演示系统,具有虚拟现实(VirtualReality)的互动和沉浸的特征,但是对开发人员的编程能力有一定的要求,而目前大多数系统并不具有信息询问功能。基于3D动画软件3dsmax和实时VR编辑器Virtools,我们为鹫峰森林公园开发了一套虚拟交互式演示系统。其中,3dsmax用于场景的构建,而Virtools用于场景的可视化,用户可以通过鼠标和键盘控制虚拟人物并与其互动。此外,植物信息可以通过鼠标点击轻松获取。通过这种方法创建的虚拟交互式演示系统不仅拥有很强的互动性和沉浸感,还带有信息询问动能,所有这些为实现此虚拟交互式演示系统提供了一个切实可行的途径。【关键字】虚拟演示;人物行动;信息询问;VirtoolsI.引言虚拟现实是一项广泛集成的技术,涉及计算机图形学、人机交互技术、传感器技术以及人工智能等领域。虚拟现实VR是采用计算机和其他设备来创造一个模拟的三维虚拟环境,在这个虚拟环境中,参与者能够进行虚拟的操作和互动,使人产生如同现实世界的感觉。目前,复杂情景的虚拟演示是重要应用领域之一,也引起了众多专家和学者的关注。虚拟演示已经采取的主要技术有:基于OpenGL和VisualC++[1]的虚拟演示技术;基于VRML和JAVA相关技术以完成虚拟演示[2][3];基于WTK技术进行建模,同时实现虚拟演示[4];基于MultiGenCreator和Vega的虚拟演示技术[5]。基于这些技术的虚拟演示系统的开发能够获得更好的沉浸感和交互性,而在开发过程中,要求开发人员具有一定水平的编程能力,且开发难度也有所增加。II.虚拟演示的实现方法虚拟演示的实现大概可以分为两部分:场景建模和场景演示。场景模型的构建是整个虚拟场景的基础,它将直接影响到虚拟环境的自然性和逼真度。场景建模就是将需要模拟的场景通过数学方法,以三位图像的形式储存在电脑里。场景演示是在虚拟场景的基础上创建的,利用演示平台、适当的算法和冲突检测,实现虚拟场景的演示。在本篇论文中,该虚拟演示系统是为北京鹫峰国家森林公园所搭建。采用了基于3D和Virtools技术的开发方法。图表1显示了系统实现的过程。图表1系统示意图根据鹫峰森林公园的实际地表景观,首先,三维模型或者场景动画在三维动画软件3dsmax中被构建好,并以.nmo格式输出(扩展名为nmo的文件是在Virtools中用来存储人物、场景以及物体信息的默认文件格式)。其次,.nmo文件将被导入到Virtools软件中。在Virtools中,通过添加模块脚本来实现交互。当所有的交互设置完成后,该虚拟交互系统将被发布。有两种方法可以进行系统的发布:一种是打包生成.exe可执行文件,另一种是将文件保存为html+vmo格式,通过InternetExplorer进行发布。.III.演示平台的功能化设计在此三维虚拟场景中,用户通过不同的演示方法观察和研习三维模型,为了获得更多有用的信息,该三维模型是利用三维数据创建的[6]。该虚拟演示系统是实时的,它为用户提供了不同的演示漫游的方法。A.场景演示的设计1)演示导航演示导航也可被认为是通过路径进行演示。人物可以通过在虚拟场景中预先设计好的道路进行漫游。在虚拟演示系统中,道路的设定是与公园中的景点分布相一致的,而这将会被提前记录和保存起来。用户可以令虚拟人物在实现选择好的道路上自由漫游,道路沿途的景观便可一一展现在用户面前。2)人物演示a)设计人物虚拟人物被设计在演示系统中,在演示过程中,用户可以再互动模式中控制人物进行漫游。用户可以用鼠标或键盘,甚至其他交互设备来控制虚拟人物在虚拟场景中向前移动、向后移动、向左转、向右转以及旋转。考虑到人在旅途中所体现出的生理特性,我们为虚拟人物设计了两个属性:体力值和饥饿值,相应地我们也设计了这些属性值的变化规则。与此同时,我们也为虚拟人物设计了背包。用户如果点击背包按钮,便可打开背包。用户点击X按钮,便可关闭信息面板。还是在图表2中,在背包中有几种食物。不同的食物对缓解虚拟人物的饥饿感的程度是不同的。在徒步漫游的过程中,虚拟人物的体力值会逐渐降低,饥饿程度会逐渐增加,“饥饿程度”状态栏显示了人物当前的饥饿值,如果虚拟人物停下来休息,体力值便会升高,如果虚拟人物补充一些食物,饥饿值就会降低。虚拟人物体力值和饥饿值的主要功能模块见图表3。图表2人物面板图表3体力值改变的实现b)人物的运动在Virtools中,虚拟人物的移动有两种类型的方法:一种是基于二维图像连续的帧来进行控制和调用,另一种方法是对三维模型的实时移动数据进行测算和响应。二维图像连续帧的实现利用了Virtools中独有的动态结构。不同的动态连续图像由响应的键盘消息驱动,从而形成了连续的动画。一般的图像连续帧由48幅不同角度的图像构成,从而保证了视觉上的连续性。在Virtools中,三维模型的虚拟人物的移动有两种类型的设置方法。一种类型是基于人物动画的交替模拟,一种类型是在三维模型的骨架中插入人物的动作。人物动画与二维图像连续帧的原则相似,预先保存好的动画会以一定的帧速率进行播放。然而,人物动作的插入是经过精确的计算的。线性插入是相对比较简单的插入算法[7]。这种算法速度快,适合于人物身体形状的转换。当初始帧和终止帧给定时,线性插入算法能够生成一个很好的中间插入帧。线性插入算法的具体内容如下:我们假设关键帧a的移动参数和旋转参数是Tj(a)和Rj(a),其中j表示x,y和z。相应的关键帧b的移动和旋转参数是Tj(b)和Rj(b)。线性插入将在关键帧a和关键帧b之间完成,我们便可得到关键帧i(aib)的移动和旋转参数,计算公式如下:在动画模式下,虚拟人物的空间变化与其在行进中的动作是相分离的。当虚拟人物在行走时,他看起来似乎是在行走,其实他并没有改变在空间中的位置,而是在原地执行行走动作。然而,在动作插入模式下,一旦虚拟人物执行行走动作,他的空间位置也会相应地随着他的行走步伐的大小而改变。我们可以比较这两种方法,动作插入模式显然更加实际和有效,能够获得更好的模拟效果。本演示系统采用了线性插入方法。系统实现的过程如下:当虚拟人物移动的框架在3dsmax中设定好后,我们利用3dsmax插件MaxExporter把数据文件转换成.nmo格式的文件,并将其导入到Virtools中。最后,通过添加控制模块实现人物动作的插入。虚拟人物的动作控制包含两个主要的模块,无限制控制器和键盘映射。无限制控制器模块根据消息来设定虚拟人物的动作或动画。例如,与人物向前移动相对应的消息是Joy_Up键,与人物向后移动相对应的消息是Joy_Down键等。键盘映射模块则根据键盘来设定动作消息。例如,按W键是控制人物向前移动,对应的消息是Joy_Up键;按S键是控制人物向后移动,对应的消息是Joy_Down键。如图表4所示。图表4人物漫游的实现B.信息查询信息查询属于更高级的互动。来自功能实现视图的信息可以分为两个独立的部分,即根据鼠标的位置选择树木的名字,然后通过数据表中的名字来找到相应的树木的相关信息并显示在信息面板上。根据鼠标的位置获取树木的名字主要是通过2D采摘模块实现的。这种方法是将鼠标在二维屏幕接口上的坐标位置与三维物体在屏幕坐标上的投影位置进行比较,如果他们恰好是鼠标要选择的目标。如果这两点是一致的,则认为鼠标选择的是该物体。树木的信息以数组的形式存储,称为Array。在Virtools中,Array是一个小的数据库,它存储在数组中。它能够满足树木信息的简单存储的要求。在Array中,树木的信息依照植物名、植物类型、生长地,以列的形式保存。该数组与显示面板的坐标相一致,使用取元素、取行模块等。坐标的不同位置与数组中的各种不同的元素相一致,以实现根据位置坐标获取数组信息。从而信息的交互得到了实现。图表5显示了在虚拟演示中,当鼠标点击树木时所显示出的树木信息。图表5树木的信息查询IV.结论复杂情景下虚拟演示的研究是重要的研究议题之一。该研究主要集中在大学校园和社区的虚拟演示中,但是对森林公园的研究却很少,而且他们并不能提供信息查询功能。在本论文中,基于3dsmax和Virtools的森林公园虚拟交互式演示系统得到了实现和完成。该系统实现了复杂情景下的虚拟演示功能和信息查询功能。虚拟交互式演示系统的发展是一个意义非凡的探索,提供了一个切实可行且高效的方法。该交互式系统在交互演示过程中显示出了平稳、良好的视觉效果。