APP下载

基于碰撞检测的交互式三维场景漫游系统研究与实现

2014-04-07曹丹丹朱彩英刘晓春

测绘通报 2014年2期
关键词:观察点碰撞检测虚拟环境

曹丹丹,朱彩英,刘晓春

(苏州市数字城市工程研究中心,江苏苏州 215021)

一、引 言

虚拟现实应用最基本的功能之一就是虚拟环境的漫游功能。为了获取构思中的环境信息,并在一个虚拟的环境中获取知识、形成概念,可使用高性能的计算机软硬件构造一个虚拟环境漫游器,它使参与者具有身临其境的沉浸感,并具有良好的人机交互能力。随着虚拟现实技术的广泛应用,单一的漫游方式无法满足千变万化的三维虚拟场景,并且不同漫游系统对漫游方式的要求也不相同,如对飞机或汽车的模拟。因此,为了适应不同三维场景及实现不同的漫游方式,本文研究了多种漫游器,可根据三维场景和漫游要求对它们进行切换,完成了对虚拟三维场景的交互漫游。

二、国内外研究现状

虚拟环境漫游具有身临其境的沉浸感和良好的人机交互能力,可使参与者在虚拟环境中获取有用信息[1]。虚拟现实技术带来的变革产生了巨大的社会、经济效益,因此近年来,针对虚拟环境漫游的研究非常活跃。ATC(Advanced Technology Center)、Atlandia Design、UNC、Paradigm Inc等机构在理论和实践上都进行了研究并取得了较好的成果。

较早进行几何式建筑漫游研究的是UC Berkeley建筑漫游工作室。1996年,他们对Berkeley大学新计算机信息大楼进行了实时漫游,检查了建筑设计中存在的缺陷并进行了及时修正[2]。

在国内,也存在着一些从事虚拟环境漫游的机构,如杭州大学工业心理学研究室。1996年,他们使用脚踏车作为交互工具对虚拟故宫进行漫游,参与者原地不动却实现了在故宫里骑行;华西师范大学将本校作为虚拟对象,使用WTK和MFC工具,开发了一个桌面式虚拟实时漫游系统[3];虚拟北邮校园漫游系统应用Java及VRML实现了多用户漫游,构建的三维交互环境允许多人漫游,各个用户之间还实现了相互感知及交互功能[4];哈尔滨工程大学校园环境虚拟漫游系统是在Unix环境下实现的具有一定人机交互能力的室内外结合的社区漫游系统[5];地学虚拟博物馆漫游系统是基于VRML实现的,它通过网络向人们展示了中国地质大学(武汉)地学博物馆的地理信息和概貌[6]。四川科技馆中的“虚拟世界”、“汽车模型驾驶”,北京航空航天大学设计的“数字朝阳”、“数字奥运博物馆”,浙江大学设计的“虚拟紫禁城”也都是通过虚拟现实技术完成的高品质模拟产品[7]。

三、技术路线

本文技术路线如图1所示。交互漫游是指用户可通过输入设备鼠标和键盘[8],控制漫游时的速度、方向、视角等。本文针对不同的场景和要求设计了几种漫游器,每个漫游器都包括键盘漫游和路径漫游两部分,并构建了蓝天白云的天空模型以增强虚拟三维场景的真实感。漫游器中加入了碰撞检测功能避免观察者飞入地下或穿墙而过等不真实情况的发生。路径漫游时,利用键盘获取控制点,并由控制点进行贝塞尔曲线插值来获取漫游路径。

图1 交互漫游技术路线

四、交互漫游功能设计及实现

进行漫游操作时,视点类似于人眼,有着摄像机的功能。漫游过程本质上是在不断移动视点或改变视线方向而产生三维动画的过程[9]。其中,视线的方向由观察点与视点的位置确定,如图2所示,观察点与视点形成的向量为视线方向向量,因此系统不断改变视点和观察点的位置来实现漫游操作[10]。

图2 漫游参数

1.键盘漫游

(1)漫游器设计

本文研究设计了3种不同的漫游器,针对不同场景、不同漫游方式可选择漫游器,如一般漫游可使用基于轨迹球原理的漫游器;当处在大规模的地形场景中时,可使用地形漫游器;若想模拟真实的交通工具,如汽车、飞机等,此时需要考虑驾驶现实的情景,可使用驾驶漫游器。这些漫游器采用实时修正场景相机观察矩阵(即观察者的观察位置和姿态)的方式来实现平滑的漫游。

在进行漫游器设计时,主要关注了视觉运动的正确性和适宜性,即怎样平滑并准确地把观察者移动到指定位置和姿态。漫游操作主要由3个参数控制,分别是视点、观察点和向上方向。如图2所示,视点相当于人眼,视点位置表示观察者的位置,观察点为眼睛看到的物体位置,而向上方向为头的朝向,它决定了是倒着、横着或其他方式观察物体。漫游器的交互主要通过鼠标运动或键盘来完成对这些参数的修改。

常用的漫游器为轨迹球漫游器,其交互是通过鼠标运动和轨迹球的定位来实现的。本文基于轨迹球原理实现了漫游器的旋转功能,如图3所示。鼠标左键实现旋转,鼠标中键实现平移,而鼠标移动方向为平移方向,鼠标的滚轮和右键实现场景缩放功能。它是在模型周围环绕观察模型,因此适合漫游小场景或模拟太空漫游。

图3 使用轨迹球来实现三维旋转的控制

当观察者对大规模的地形场景进行漫游时,在现实情况中,不会出现头朝下的情况。此时,可使用地形漫游器进行漫游。在地形漫游器中,当向上方向转换角度的绝对值大于90°时,向上方向不发生任何改变,以保证观察者是正向观察物体。它还加入了相交测试的功能,将观察点的位置始终定位在视线射线与模型的交点上,增强了漫游操作的逼真感。

当需要模拟汽车运动时,上文所述两种漫游器不合适,可使用驱动漫游器实现该功能。驾驶漫游器中没有场景缩放、平移功能,并拉近了视点与观察点之间的距离,跟现实中驾车相似,鼠标左右移动代替了鼠标左键的旋转功能,鼠标移动的Y值设定前进的速度。

为了能够根据不同场景或不同要求来选择漫游器,使用按键切换操作器实现了对多种漫游器的切换,并且保持场景的状态不变。

(2)键盘命令

键盘漫游命令包括:左转、右转、前进、后退、上升、下降、仰视、俯视、左移、右移、移动加速、移动减速、旋转加速、旋转减速、放大、缩小。

OpenGL中函数gluLookAt()是一个快速的视点转换变换函数,它使用视点、观察点位置及上方向来表达相机的位置和姿态,并且使用glTranslate()、glRotate()函数来实现平移和旋转。

假设系统使用的坐标中,Z值表示场景的高度。左转、右转是视线绕着Z轴逆、顺时针旋转一定角度;仰视、俯视是增加、减小视线与XY平面的夹角;前进、后退则是将视点沿着平行于XY平面的方向移动;左移、右移按照当前视点的左右方向水平移动一定的距离;上升、下降,则增、减视点位置的高度值(Z轴坐标值),视线方向不变;放大、缩小,是减小、增加视点与观察点之间的距离,视线方向保持不变;移动加减速、旋转加减速则是相应地增加或减小速度、旋转角度值。

(3)实时碰撞检测

虚拟环境自身的复杂性和实时性不断要求使用碰撞检测技术[11],当观察者漫游时,观察者不能嵌入物体中,也不能穿过物体[12],因此本文在多个漫游器中加入了碰撞检测功能。

本文利用直线段对复杂场景进行检测。首先,利用层次包围体将多数不相交的物体进行初步排除;然后,对那些可能相交的物体作进一步的检测。在进一步检测过程中,首先遍历场景的层次树,用线段测试与层次树节点相交情况,一直遍历到层次叶子节点,进而精确检测与叶子节点所包围的多边形面片的相交。将多边形转化成三角形,并与线段进行相交测试。精确求交点算法的基本思路是:首先判断线段是否跨越三角形其中的两条边,若跨越了,则继续判断线段的两个点是否在三角形所在面的同侧;否则,确定不相交,检测两个点是否在三角形面的同侧时,若不在同侧,则线段和三角形相交,否则不相交。

进行漫游时,观察者的位置不断变化,需要不断地进行检测,从而实现实时碰撞检测。为此,本文提出一种新的检测线段确定方法:在还未发生碰撞检测的情况下,根据用户操作,获取视点下一帧的位置,并将该位置作为检测线段的起点,选取当前帧的位置作为检测线段的终点。若没有碰撞,则移动视点,并更新检测线段,否则视点不发生改变。

2.路径漫游

路径漫游是播放预先设置好的漫游路径来漫游三维场景。漫游路径是由控制点按一定的插值方式确定的一条三维空间曲线[13],常见的有贝塞尔曲线、B样条曲线及非均匀有理B样条曲线。本文使用两条贝塞尔曲线来获取路径曲线,贝塞尔曲线的4个端点坐标由键盘事件确定。

贝塞尔曲线依据4个位置任意的点坐标P0、P1、P2、P3绘制出一条光滑曲线,曲线的参数形式为

在路径不平滑的情况下,当播放时,在转角处视线会按转角的大小发生突然偏转现象,从而出现在转角处相邻两帧不连续的现象,使观察者明显感觉到画面的抖动。使用贝塞尔插值方法可以获取一条平滑路径曲线,从而消除转角抖动问题,路径曲线如图4所示。

图4 路径漫游的路径曲线

键盘和路径漫游方式的切换使用键盘来控制,并且在进行路径播放时加入了键盘事件,用键盘控制播放的开始、暂停和重新开始。

3.天空建模

为三维场景添加蓝天白云能够为三维虚拟场景增加逼真感。本文利用天空盒方法构建了一个天空模型[14],如图5所示。天空盒使用一个矩形方盒作为天空的远景贴图的载体,并将该矩形方盒绘制为一个球形。用于天空盒的背景图片中,顶上图片的四边必须和前、后、左、右图的上边相连,而底图必须和前、后、左、右图的下边相连,并且前、后、左、右4幅图片必须首尾相连。

图5 球形天空盒构建的天空模型

五、试验效果分析

本文采用OpenGL实现了基于碰撞检测的交互漫游操作,并应用于近海三维场景中。使用天空盒构建天空模型后的三维虚拟近海场景如图6所示。

图6 近海领域虚拟场景

默认状态下使用了轨迹球漫游器进行键盘漫游,数字键2切换成地形漫游器,数字键1切换回轨迹球漫游,数字键3为驾驶漫游器来模拟驾驶汽车,数字键4则切换成路径漫游。在进行键盘漫游时,键盘的方向键上下左右分别实现前进、后退、左移和右移的功能,Home键上升,End键下降,PageUp加速,PageDown减速,A键向左旋转,D键向右旋转,W键俯视,S键仰视,P键加角速度,L键减角速度,G键获取路径漫游的控制点。路径漫游时,R键控制着漫游的重新开始,H键暂停,J键继续。

六、结束语

本文对虚拟交互漫游中的关键技术进行了研究,为了适应不同场景、不同方式的漫游,设计了多种不同的漫游器,并加入了碰撞检测技术,以增强漫游的真实感,可使用切换操作器对它们进行实时切换;使用键盘选取路径的控制点,使用贝塞尔插值得到平滑的漫游路径,使路径漫游消除了转角处的抖动;采用球形的天空盒构建了一个真实的天空,增加了场景的逼真感。系统可通过键盘或设置漫游路径的方式对场景进行实时交互式漫游,漫游时,画面流畅,可满足人们需求。

[1] 郝爱民,赵沁平.虚拟环境漫游引擎设计与实现[J].计算机工程与应用,2000(12):86-88.

[2] 黄莹莹.虚拟校园漫游及其人机交互技术的研究与实现[D].哈尔滨:哈尔滨工程大学,2004.

[3] 吴凤娟,刁永锋.虚拟校园漫游系统的设计及实现[J].苏州科技学院学报:工程技术版,2005,18(2):78-80.

[4] 侯文君,吴宇飞,王颖,等.多用户虚拟北邮校园漫游系统的设计开发[J].系统仿真学报,2006,18(8):2203-2205.

[5] 黄莹莹,彭敏俊,许岷.基于虚拟现实的数字校园漫游系统的设计与实现[J].应用技术,2005,32(5):40-42.

[6] 宋慧玲,邓洪.基于VRML的地学虚拟博物馆漫游系统的实现[J].计算机工程,2006,32(17):239-241.

[7] 蒋子龙.三维虚拟场景人机交互与漫游技术研究[D].沈阳:沈阳工业大学,2010:2-3.

[8] 刘诗儒,冯秀芳.基于桌面的虚拟漫游系统的构造与实现[J].太原理工大学学报,2003,34(4):478-480.

[9] 宫勇,蒲小琼,张翔.虚拟场景漫游技术及其系统实现[J].计算机工程与应用,2007,43(15):89-91.

[10] 尚建嘎,刘修国,郑坤.三维场景交互漫游的研究与实现[J].计算机工程,2003,29(2):61-62.

[11] 李敏.基于OpenGL的虚拟校园漫游系统的设计与实现[D].济南:山东大学,2008.

[12] 王兆其,赵沁平,汪成为.面向对象碰撞检测方法及其在分布式虚拟环境中的应用[J].计算机学报,1998,21(11):991-994.

[13] 姜雪伟,孙晓鹏,王鹏杰.虚拟交互漫游系统关键技术研究与实现[J].大连民族学院学报,2009,11(3):272-276.

[14] 娄渊胜,朱跃龙,黄河,等.基于虚拟现实技术的实时漫游系统研究及实现[J].计算机工程,2001,27(6):98-99.

猜你喜欢

观察点碰撞检测虚拟环境
全新预测碰撞检测系统
我省4家农民合作社被列为部级观察点
前庭刺激对虚拟环境三维空间定向的影响及与空间能力的相关关系
如何通过虚拟环境有效管理Python第三方库
基于BIM的铁路信号室外设备布置与碰撞检测方法
虚拟环境下大数据智能并行聚类方法研究
空间遥操作预测仿真快速图形碰撞检测算法
清明节期间全国祭扫民众达1338.7万人次
BIM技术下的某办公楼项目管线碰撞检测
论高校思想政治教育网络虚拟环境的特征