| 基于Vizard环境的三维交互系统设计与实现 |
2. 地球空间信息技术协同创新中心, 湖北 武汉, 430079;
3. 武汉大学灾害监测和防治研究中心, 湖北 武汉, 430079
2. Collaborative Innovation Center of Geospatial Technology, Wuhan 430079, China;
3. Hazard Monitoring & Prevention Research Center, Wuhan University, Wuhan 430079, China
以前的三维场景漫游系统大多使用二维鼠标进行操作[1, 2]。有些三维场景漫游使用VRML语言在网页中进行三维显示,但只能通过鼠标点击进行定位,无法真正感知三维场景[3];有的使用ArcGIS进行三维交互,由于二维鼠标的限制无法实现在纵深方向上的浏览[4, 5];而利用OpenGL进行三维场景的浏览则需要借助键盘和鼠标来控制速度、行进、旋转等操作,而且在完成实际的用户动作时,需要借助两种或者两种以上的设备进行组合才能完成[6]。为弥补二维鼠标的缺陷和三维场景漫游的不足,本文提出使用三维鼠标、数据手套和数据头盔进行三维场景交互的方法[7]。该方法可以真实感受三维场景,实现对虚拟场景纵深方向的浏览,而且不需要对键盘、二维鼠标进行设置就可以实现在三维场景中的前进、后退、加速、减速、旋转等功能[8, 9]。此外,使用数据手套的交互方式可以让用户的动作直接在虚拟场景中响应,而不需要借助操纵杆、方向盘等外部设备,增加了交互的沉浸感[10-13]。考虑到Vizard几乎支持当前所有的虚拟现实设备,包括动作追踪器、3D立体显示器、头盔显示器及其他众多外部输入设备,同时,Vizard虚拟现实软件与WorldViz旗下的VideoVison增强现实装置完美结合,能够轻松实现计算机图像与现实场景的融合,可使构建及渲染虚拟场景的效率大大提高,Vizard的集成开发环境极大简化了维护数据素材的工作量[14]。为此,基于Vizard的三维交互可视化,本文设计并实现了一套三维交互系统。该系统成功连接了多种交互设备,从而实现设备的优势互补,同时利用Vizard高效的虚拟场景构建及渲染功能优化了系统的性能,并极大地减少系统响应时间,最后系统利用数据头盔进行漫游,具有很强的沉浸感和很好的用户体验[15, 16]。
1 三维交互系统设计针对以往三维交互的不足,本文借助六自由度的三维鼠标、数据手套和数据头盔等多个交互设备,在Vizard环境下设计了三维交互系统,其总体架构如图 1所示。三维交互系统主要包括三维场景的浏览(空中浏览、纵深浏览、固定路径浏览等)、视点的切换、二维地图的导航、三维场景的交互和基于数据头盔的沉浸式漫游等功能。
![]() |
| 图 1 三维交互系统总体架构 Figure 1 Framework of 3D Interactive System |
需要说明的是,在实现三维交互功能之前,必须建立三维场景并在access数据库中存储三维模型的属性, 其中需要将三维场景的skp格式转换为obj格式的文件才能导入Vizard中进行三维交互。三维场景包括三维地形和三维模型, 其建模是通过ArcGIS 10.2与Google SketchUp进行结合实现的。三维地形的建立是从91卫星图上获取高分辨率的影像数据和DEM数据,在ArcGIS中裁剪所需要的区域,用Global Mapper转换成SketchUp可以读取的DEM格式,最后在SketchUp中生成三维地形并贴上影像数据而完成。而三维模型的建立则是以建筑物的影像作为地图,在SketchUp中绘制建筑物的平面图,根据对建筑物及地物纹理和高度的采集进行建模。图 2给出了某区域三维场景效果图。
![]() |
| 图 2 某区域三维场景图 Figure 2 Three-dimensional Scene in a Region |
2 系统功能的实现及技术问题处理 2.1 基本浏览
1) 地面浏览。为了实现三维鼠标的地面浏览,需要利用函数viz.add (sensorPlugin)访问三维鼠标设备,将硬件设备的相应插件导入到Vizard脚本程序后,要保证三维鼠标方位和虚拟视点方位一致,通过viz.link ()函数将硬件设备的运动参数和虚拟视点的方位关联起来, 实现基本的地面浏览。最后为了使浏览更加真实,需要使用方法setRotateScale([x, y, z])设置三维鼠标的旋转轴,限制旋转平面在XY平面内(以水平方向为X轴,将X轴逆时针旋转45°为Y轴,竖直方向垂直于X轴的为Z轴),使之只能在水平面旋转。
除了使用三维鼠标浏览,也可以使用数据手套进行地面浏览。通过viz.addSensor (‘’)访问数据手套,再根据5DT数据手套的SDK中内置的16种手势,进行功能设计[17]。如设计9号手势(gesture=9) 的响应函数为:以自身局部坐标系为基准向前进,摆出该手势时,视点便会根据手势所代表的功能进行相应的操作。系统通过设计其中的4种手势实现了前进后退、旋转和上升功能。
2) 空中浏览。通过设计类似于飞机飞行的模式实现空中浏览。利用Tracker跟踪器跟踪鼠标球的状态,引入vrpn7.dle进行鼠标状态的响应,设置三维鼠标的加速、减速、提高、降低灵敏度等函数,定义鼠标事件及响应消息来实现相关功能。向前推一下鼠标球实现匀速浏览;一直推动鼠标球实现加速浏览;向后拉鼠标球实现减速浏览等。
3) 垂直浏览。为了进行垂直浏览,首先要保证三维鼠标方位和虚拟视点方位的一致,为程序添加一个时间事件的响应函数,并且将时间事件的响应间隔设置为0,以保证实时性。再利用viz.link ()函数将硬件设备的运动参数和虚拟视点的方位关联起来,当向上提三维鼠标的鼠标帽,视点便跟随鼠标帽的提升速度上升到空中;向下压鼠标帽时,视点便会随着下降,这样便可以实现纵深方向的漫游,甚至可以进入到房间内部进行漫游。
2.2 视点切换视点切换主要解决自主漫游和固定路径漫游之间的切换问题。自主漫游通过属性设置中的高级设置配置特定的3D鼠标漫游模式,三维鼠标的操作模式有对象模式、人眼模式或摄影机模式,为了使交互更加真实,采用对象模式进行交互操作。固定路径漫游使用Vizard软件提供的vizact库定义各种抽象动作类型,并将其赋给三维模型,从而使它们具备相应的动画效果。利用平移move ()、旋转spin ()、运动moveTo ()等函数结合动作序列函数sequence ()实现了人物按照矩形固定路线周而复始地对三维场景进行浏览的功能。
通过Vizard自带的GUI对象实现视点切换。如图 3所示,当勾选第一个框(Link to sensor)时,用户可以使用三维鼠标进行自主漫游;当勾选第二个框(View to male)时,用户可以不进行任何操作,就可以跟随视点浏览建筑物一周,给用户带来了方便。
![]() |
| 图 3 二维导航及视点切换 Figure 3 2D Navigation and Viewpoint Switching |
2.3 二维导航
二维导航指利用二维地图显示三维场景的俯视图和后视图,方便用户快速找到位置以及到目的地的最短距离。在主显示窗口中创建两个子窗口(一个表示三维模型的俯视图;另一个表示主虚拟视点的后视图)和两个虚拟视点,为了在子窗口中显示与主窗口不一样的视角,要将虚拟视点与目标显示窗口关联起来。根据实际需求设置窗口和视角的位置、朝向等信息,并将每个子窗口所要显示的相应信息传递给每个窗口中的虚拟视点, 这样各个子窗口就按要求显示出不一样的视角信息。如图 3所示,当使用三维鼠标进行浏览时,从左上角的鹰眼可以清楚地看见自己处于整个三维场景的哪一位置,可以很方便找到去往目的地的最短距离;从右上角的鹰眼处可以看到自己背后的场景,以便进行后退或转向浏览。
2.4 三维交互1) 目标选取。数据手套对物体的选取原理是基于碰撞检测,为使三维模型具有碰撞物理效果需要调用函数viz.phys.enable ()启动物理引擎,并设置三维模型的物理形状。为克服虚拟物体及数据手套的不规则等碰撞检测难以控制的难题,设计选用包围球碰撞检测方法,即使用函数collideSphere (radius),包围球的物理形状是与三维模型绑定在一起的,会随着三维模型的运动而运动,并且代替三维模型进行碰撞检测和反弹计算,从而实现对三维物体的选取。
为弥补5DT数据手套没有装配位置跟踪系统的缺陷,借助基于光学的PPT运动跟踪器来追踪手的位置和方位信息,提供数据手套的三维位置信息。在Vizard中进行数据库链接, 添加hand库构建虚拟手模型,并连接虚拟手与数据手套,用户戴上数据手套,随意操纵自己的左右手,在虚拟场景中,能够观察到灵巧的虚拟手随着自己手的运动而运动。
2) 属性输出。基于上面所完成的目标选取,可以对所选取三维模型的属性进行输出。选取物体时,调用数据库来获取模型的信息,便可以输出物体的属性。进行浏览时,若使用数据手套去选取建筑物的玻璃、墙壁等,都会弹出相应的属性信息,为用户进一步了解感兴趣的事物提供了方便,增强了系统的交互性与实时性。
2.5 沉浸式漫游使用数据头盔来达到沉浸式漫游效果。在代码中设置Vizard画面显示为全屏模式,调用相关的方法并指定当前使用的头盔型号来实现头盔的功能。通过在Vizard里添加跟踪代码连接头盔自带的追踪器来追踪头盔的位置信息,实现沉浸式漫游。佩戴数据头盔的用户能看到真正的三维场景,而且当用户向前后、左右方向走动时,看到的三维场景也实时相应地发生改变,用户完全脱离现实世界,沉浸在自己的虚拟世界中。
3 结束语随着环境感知和信息分享时代的到来,如何实现三维虚拟场景的强感知和高效的交互成为迫切的需求。研究采用三维建模软件(Google SketchUp)与虚拟现实开发平台软件(Vizard)相结合的方式创建了基于多个感知设备和高沉浸感的三维交互系统。系统具备三维交互的各种应用功能,突出了三维鼠标的纵深浏览、数据手套的选取输出以及数据头盔的沉浸式漫游,克服了以往三维交互中二维鼠标的缺陷和交互设备缺陷。通过融合数据手套及数据头盔的优势,该系统能更好地满足三维交互强沉浸感的需求,使得用户的环境感知和交互更加逼真,增强了系统漫游的三维真实感。
| [1] | 毛学刚, 李明泽, 范文义. 三维虚拟校园的设计与实现[J]. 测绘信息与工程, 2008, 33(1): 47–49 |
| [2] |
梁少刚. 基于位置服务的三维虚拟校园系统的设计与实现[D]. 重庆: 重庆邮电大学, 2015 http://cdmd.cnki.com.cn/Article/CDMD-10617-1015035437.htm |
| [3] | 魏勇. 基于VRML的虚拟校园交互式漫游系统的设计与实现[J]. 科技信息, 2011, (20): 614 DOI: 10.3969/j.issn.1001-9960.2011.20.537 |
| [4] |
李芙蓉. 基于GIS的三维虚拟校园的设计与实现[D]. 西安: 长安大学, 2014 http://cdmd.cnki.com.cn/Article/CDMD-10361-1012421690.htm |
| [5] | 兰玉芳, 付金霞, 徐霞, 等. 基于SketchUp与ArcGIS的校园3DGIS的设计与实现[J]. 遥感技术与应用, 2013, 28(2): 346–352 DOI: 10.11873/j.issn.1004-0323.2013.2.346 |
| [6] |
李敏. 基于OpenGL的虚拟校园漫游系统的设计与实现[D]. 济南: 山东大学, 2008 |
| [7] |
田光辉. 三维鼠标系统设计及性能分析[D]. 济南: 山东理工大学, 2013 http://cdmd.cnki.com.cn/Article/CDMD-10433-1013297081.htm |
| [8] |
席明. 基于自由立体显示器的三维视频重建和显示技术研究[D]. 杭州: 浙江大学, 2013 http://cdmd.cnki.com.cn/Article/CDMD-10335-1014162774.htm |
| [9] |
黄涛. 基于Unity3D的虚拟校园漫游系统的研究和实现[D]. 南宁: 广西师范大学, 2014 http://cdmd.cnki.com.cn/Article/CDMD-10602-1014315149.htm |
| [10] | 胡乐华, 刘春, 王林林. XNA环境下数据手套交互模块的研究与实现[J]. 沈阳航天大学学报, 2011, 28(5): 9–13 |
| [11] |
臧坤. 数据手套手势识别技术研究[D]. 北京: 北方工业大学, 2013 http://cdmd.cnki.com.cn/Article/CDMD-10602-1014315149.htm |
| [12] |
陈青. 基于数据手套的数控仿真系统交互技术研究[D]. 广州: 广东工业大学, 2013 http://d.wanfangdata.com.cn/Thesis/Y2304591 |
| [13] |
陈军. 基于双目视觉及数据手套的虚拟手势交互平台的研究与设计[D]. 北京: 北京邮电大学, 2011 http://cdmd.cnki.com.cn/Article/CDMD-10013-1011120511.htm |
| [14] | 安维华. 虚拟现实技术及其应用[M]. 北京: 清华大学出版社, 2014 |
| [15] | 赵雁雨, 曹良才. 头盔显示器技术发展综述[J]. 测试技术学报, 2011, 25(6): 559–562 |
| [16] | 王辉, 刘春华, 王永生. 头盔显示系统评述[J]. 电光与控制, 2012, 19(8): 45–49 |
| [17] | Lu Gan, Shark L K, Hall G, et al. Immersive Manipulation of Virtual Objects Through Glove-based Hand Gesture Interaction[J]. Virtual Reality, 2011, 16(3): 243–252 |
2017, Vol. 42




