虚拟旅游交互技术研究

虚拟旅游交互技术研究

一、虚拟环境中碰撞检测的研究

为了增强真实性、增加沉浸感,虚拟旅游系统不仅要保证用户能从视觉上如实地看到虚拟环境中的对象,同时也要能够身临其境的与其进行交互.如用户进行触摸、抓取动作时,虚拟系统中的事物要做出相应的反应.这就要求系统应该及时准确的检测出这些碰撞,并给出对应的碰撞变化.使用NavigationInfo节点创建的替身可以进行碰撞检测,常用的碰撞检测方法有层次包围盒法和空间剖分法.实际上,在虚拟旅游系统中,大部分的对象碰撞检测无需太过精确,我们知道两个或多人物体想要发生碰撞,至少其中一个物体是运动状态的,因此我们只要对运动的物体进行碰撞检测即可,这就大大降低了工作量和工作难度.本系统将2种常用的方法相结合,使用层次碰撞检测的方法,将整个过程分为预处理、全局检测和局部检测3个阶段.

1预处理阶段

这一阶段的工作是为虚拟旅游系统中的对象构造层次包围盒树,为碰撞检测打好基础.具体方法:每个虚拟对象元素最外层采用包围球,以下各层采用轴对齐包围盒.自顶向下地构造二叉树.

2全局检测阶段

虚拟旅游系统中的场景、对象非常之多,我们可能利用空间剖分法对场景进行划分.因为对于一个运动的物体来说,在某一个时间段内,它只会与它邻近的物体发生碰撞.这样就大大降低了碰撞检测的次数.具体做法:使用均匀剖分法把虚拟场景划分为一个a*b的矩阵,矩阵中的元素对应场景中的任一单位格.场景中的每一个对象看作一个质点,该质点的坐标就是该对象包围球的球心坐标.使用这种方法,将场景的所有对象都归入对应的单元格中.这样,确定了一个单元格之后,该单元格中的所有对象也被随之确定.对于一个运动物体来说,根据该对象的坐标就可以确定它所处的单元格,根据矩阵中元素之间的关系,再确定与之相邻的单元格,进而确定该运动物体可能会与哪些物体发生碰撞.

3局部检测阶段

通过空间剖分方法我们将大多数远处的碰撞对象已经过滤掉,局部检测的主要工作就是对运动对象附近的物体进行碰撞检测.局部检测阶段分为粗略检测层和精确检测层两个部分.在粗略检测层中,我们知道虚拟场景中运动对象的速度一般不会太快,在某一很短的时间片内,只有与之特别贴近的极少物体才会与之产生碰撞,而该运动对象所处单元格及邻近单元格的大多数物体是不必发生碰撞的.因此,我们为该运动对象建立一个碰撞检测空间如下图1所示,即在某一时间片内那些特别贴近并可能发生碰撞的物体的集合,将碰撞检测范围进一步缩小.接下来,我们将进入碰撞检测空间的对象的层次包围盒树的信息调入内存,进行精确的碰撞检测,首先检查两物体最外层的包围球是否相交,如果不相交,刚碰撞未发生.若相交,则进一步对两物体的层次包围盒二叉树进行相交测试.

二、编程交互方法

在创建虚拟场景时,我们也可以使用Script节点和外部程序接口EAI来实现功能复杂的交互.

1内部Script节点

Script节点的基本功能是通过eventIn事件来接收其他节点发来的事件信息,在节点内部使用程序设计语言对其进行处理计算,然后再通过eventOut事件把信息回传给Script节点,使节点发生预期的变化效果.Script节点的url域中定义一个URL列表,该列表的URL值指定程序设计语言.一般常用Java或JavaScript语言.Script节点将程序设计语言和场景中的传感器、插补器联系起来.通过程序设计语言控制传感器和插补器,实现场景中的交互.

2外部编程接口EAI方法

EAI定义了针对X3D的Java类,通过创建Java小程序接收和发送虚拟场景中的节点的事件信息,达到用户与虚拟场景进行沟通交互的目的.使用EAI方法创建的程序段可以与虚拟场景放在同一Web页面中,Javaapplet与浏览器插件互相通信,使用户真正的掌控虚拟场景,增强用户与场景的交互程度.本文详细地阐述虚拟旅游系统中交互技术的实现方法.虚拟旅游是现代计算机技术的全新产物,前景非常广阔,它的成熟发展必将引领一种新的旅游风尚.

本文作者:刘学超 单位:淮北职业技术学院