摘 要:随着计算机技术和图像技术的发展,虚拟现实技术在很多领域得到了广泛的应用,在虚拟环境中的交互是虚拟环境具有真实效果的关键。文章从碰撞的检测以及虚拟环境中对象的交互几个方面阐述了虚拟环境中的交互问题,并利用VRML成功地解决了上述问题。
关键词:虚拟技术;交换
1引言
虚拟现实技术(Virtual Reality),又称灵境技术,它集计算机技术、传感与测量技术、仿真技术、微电子技术于一体。虚拟现实技术有3个基本特征:沉浸感,交互性,构想。其中沉浸感是指用户完全沉浸在通过计算机所创建的虚拟环境中;交互性是指用户使用交互输入设备来操纵虚拟物体,以改变虚拟世界;构想是指用户利用VR系统可以从定性和定量综合集成的环境中得到感性和理性的认识,从而深化概念和萌发新意。他们之间的关系如图1所示
图1
本文将以可以自由调节方向的台灯作为实例,对碰撞检测器进行详尽的分析。
2虚拟现实中交互功能的触动检测器
2.1虚拟场景实例介绍
现实生活中,人在完成某一操作前,总是先确定对象存在的位置,然后再施加作用。因此,虚拟对象给用户的“物理存在感”是虚拟环境真实效果重要体现,在进行交互操作时,这种效果往往比虚拟物体外观的真实性给用户的感受更强烈。
在VRML中的虚拟世界和用户之间的交互是通过一系列检测器来实现,通过这些检测器节点,使浏览器感知用户的各种操作,这样用户就可以和VRML虚拟世界中的三维对象进行直接交互。触动检测器是用来检测用户的触动动作的,其中包括TouchSensor节点,PlaneSensor节点,CylinderSensor节点和SphereSensor节点。
在下面展示的场景中,用户对台灯的操作(平移、旋转、材质等的实时修改)是交互性最充分的体现。当用户在场景中用鼠标点击灯泡时,发现灯泡会变明亮,照亮场景一定的区域,并且灯罩部分也会变得透明。当对着灯柱部分按住鼠标左键进行旋转时,发现灯罩部分以及连接其的灯杆都随之沿任意方向旋转,而使用鼠标点击台灯底座旋转时,整个台灯都跟随鼠标移动方向围绕Y轴进行旋转,这些交互行为都是使用了触动传感器来检测用户的触动动作的。其中每当我们接触这些可交互的部位并触发它动作时,都会有相应的声音发出,给人以真实的听觉感受。
2.2各检测器的使用实现
2.2.1球面检测器
场景中,灯泡的转轴部分是用球体造型创建的实体,对该实体设置了SphereSensor节点,当鼠标点击该实体的兄弟部分时,能将用户动作转换为绕该实体旋转。球面检测器将二维的拖动解释为三维空间中绕局部原点的旋转。若在该节点的兄弟几何体处按下鼠标,浏览器会以点击鼠标的点到原点的距离为半径作一个想象中的球,随后拖动将解释为旋转球体。
2.2.2圆柱检测器
在该场景中,对灯座设定了CylinderSensor节点,使得整个造型都跟随着鼠标的移动而围绕Y轴旋转。该节点是把二维的拖曳输入(如拖曳鼠标)转变为三维空间中沿Y轴的旋转。根据用户点击的位置(相当于传感器的Y轴),CylinderSensor节点可以有两种相关行为,即像一个圆柱或像磁碟绕Y轴旋转。
当用户移动鼠标至可感知几何体并按下键时,浏览器产生一个绕监控器局部坐标系统Y轴的虚拟圆柱,这个圆柱的底和侧面大小比例有diskAngle确定。可以把diskAngle看作是一个在虚拟圆柱内部的圆锥的顶角,圆锥的底面圆盘即为圆柱的顶面。
如果用户点击圆柱的顶或底面,拖曳动作就会被解释为和旋转一个平面圆盘一样。如果用户点击圆柱的侧面部分,拖曳动作就会被解释为旋转这个圆柱。如果想设定旋转范围,可以通过设置minAngle和maxAngle的值把旋转限制在某一特定范围内即可。当圆柱体检测器处于激活状态时,其他定点设备传感器不会作任何事件。
2.2.3接触传感器与时间传感器
在该场景中,灯泡部分是由Sphere节点创建的球体几何造型,并设定了其表面材质域的域值,使其表面对环境具有反射的性质。在灯泡部分的交互是使用了接触传感器,当点击灯泡部位时会有两种材质效果的变化,即明暗变化。这是通过TouchSensor节点将两种材质效果绑定在一起,前一效果是浏览器默认的,要将它改变到另一效果则要通过TouchSensor将它激活,这样当鼠标点击灯泡时就会产生我们所看到的场景效果了。而代码中的TimeSensor节点是向标量插补器(ScalarInterpolator)节点输出时间,根据该插补器指定的一系列透明度关键值,控制材质节点中的特定域值,使灯罩的透明度在不同时刻发生改变,这样就显得更加真实。
2.2.4声音节点的使用
在该场景中我们通过交互动作,发现每进行一步行为都会有声音的发出,这是运用了Sound节点,在场景中生成了一个声音发射器,以球面或椭圆的模式播放出声音,从而达到听觉的效果。在节点中设定声音可听的最大最小范围,即在不同的范围内移动,声音在音量上发生变化并且声音的传播范围也有改变。
3 总结
虚拟现实场景的碰撞检测是虚拟现实系统的关键问题,在虚拟场景中实现有效的碰撞检测也是当今虚拟现实研究的一个重点和热点。碰撞检测应用范围相当广泛,特别是在各种仿真模拟试验中,起十分重要的作用。而精确的结果往往需要引入碰撞检测算法,加速连续碰撞检测,实现快速准确的碰撞,同时在解决交互问题时可以将JAVA语言的应用与VRML相结合,以实现更好的交互控制。
参考文献:
[1] 赛博科技工作室编著 VRML与Java编程技术 人民邮电出版社
[2] 张金钊等著 VRML编程实训教程 清华大学出版社