第6章交互功能的实现_第1页
第6章交互功能的实现_第2页
第6章交互功能的实现_第3页
第6章交互功能的实现_第4页
第6章交互功能的实现_第5页
已阅读5页,还剩29页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第六章、交互功能的实现对于VRML场景来说,有了动画功能,能够让浏览者感受到一种生动、逼真的效果,但是对于浏览者而言,还是有不足,因为浏览者还是被动的接受信息。如果浏览者能够控制场景,那么动画、光照以及声音等效果才能更逼真。实现用户和场景的交互有很多的方法,最常见的是通过检测、感知等传感器节点的使用,使浏览者和虚拟对象能够实现交互的功能。传感器可以分为两大类,一类是接触型的传感器,另一类是感知型的传感器。传感器主要用来检测浏览者在虚拟场景中的动作。所谓动作,广义的看可以分为两类:一类是用户的输入设备对于对象的操作。用户在浏览场景的时候,主要输入设备就是鼠标,这时候传感器实际上就是检测用户对鼠标的各种操作动作,如鼠标单击、指向和拖动等动作,从而对场景作出相应的反应。检测这类动作的传感器是接触型传感器。另一类是用户和场景中某对象接近的程度,对象作出响应,从而在用户和虚拟对象之间形成交互。检测用户和对象接近程度的传感器是感知传感器。描述接触型传感器的节点有:接触传感器(TouchSensor)平面移动型(PlaneSensor)球面传感器(SphereSensor)柱面传感器(CylinderSensor)描述感知型传感器的节点有:可见传感器(VisiblitySensor)接近传感器(ProximitySensor)碰撞传感器(Collision)一、接触型传感器接触传感器节点TouchSensor主要用于检测用户基于指点设备(鼠标、操纵杆等)的动作,并将其转换后以各种形式的事件输出。TouchSensor节点可以作为任何编组节点的子节点使用,并感知用户对该编组节点中所以造型的指点动作。注意,TouchSensor本身并不创建任何几何造型或其他可视对象,因此如果不将该传感器和某个与它同属一个层次的造型节点捆绑在一起,该传感器节点将无法发挥其应有的作用。1、接触传感器TouchSensor{ enabled TRUE #SFBool hitNormal_changed eventOut #SFVec3f hitPoint_changed eventOut #SFVec3f hitTexCoord_changed eventOut #SFVec2f isActive eventOut #SFBool isOver eventOut #SFBool touchTime eventOut #SFTime}enabled:表明是否激活该传感器,为TRUE,表示激活,能够对指点输入设备的动作作出反应并产生各种事件输出。isOver:指点设备当前是否正位于对象上,当在对象上,引发该事件,事件值为TRUE;当离开对象时,也引发该事件,事件值为FALSE。isActive:指点设备是否点击对象,当设备为点击状态时,引发该事件,事件值为TRUE;当释放设备点击状态后,也引发该事件,事件值为FALSE。touchTime:当指点设备点击并释放后,即isOver为TRUE且isActive为FALSE时,引发该事件,事件值是释放指点设备时的系统时间。当指点设备选取对象并点击设备时,即isOver为TRUE且isActive为TRUE时,TouchSensor会进一步跟踪以下三个事件:hitPoint_changed:输出指定点的位置坐标;hitNormal_changed:输出指定点的法向量;hitTexCoord_changed:指定点的造型表面的纹理坐标。例6-1,6-22、平面移动型传感器平面移动型传感器(PlainSensor)节点检测输入指点设备拖动对象的动作,对象在XY平面移动,但是其方位并不发生变化。PlaneSensor{

minPosition 00 #SFVec2f maxPosition -1-1 #SFVec2f enabled TRUE #SFBool offset 000 #SFVec3f autoOffset TRUE #SFBool isActive eventOut #SFBool trackPoint_changed eventOut #SFVector3f translation_changed eventOut #SFVector3f}minPosition、maxPosition:设置对象被指点设备移动时在x轴和y轴方向上的最小和最大平移位置。minPosition的默认值为x=0,y=0;maxPosition的默认值为x=-1,y=-1。如果minPosition域中的x或者y大于maxPosition域中相应分量,则对象的移动将不会受到限制;如果minPosition域中的x或者y等于maxPosition域中相应分量,则对象将只在一维方向上运动。enabled:传感器是否响应指点设备的动作,为TRUE表示传感器打开,FALSE表示关闭。offset:对象被移动后相对于初始点的最远位置autoOffset:指明对象被移动后,再次移动对象时开始的位置。为TRUE,则每次移动对象后,对象会停留在新位置,若开始下一次移动,则视前一次移动的终点位置为其初始位置而开始新的移动。为FALSE,则每一次新的移动开始之前,对象自动先复位到原始位置。isActive:指点设备点击时引发该事件。trackPoint_changed:对象移动后引发,事件值是XY平面上点击点的坐标位置。该事件忽略minPosition和maxPosition的限制。translation_changed:对象移动过程中鼠标在XY平面上的暂时位置,这个事件要受minPosition和maxPosition的限制。例6-3,6-43、球面传感器球面传感器(SphereSensor)用来检测用户操纵指点设备的动作,并将该动作转换成对象在围绕某一点为中心的一个球体表面上所产生的旋转,使浏览者像是在一个转动的球体上进行观察,该中心点为SphereSensor节点所在坐标系的原点。SphereSensor{ enabled TRUE #SFBool offset 0.01.0000.0 #SFRotation autoOffset TRUE #SFBool isActive eventOut #SFBool trackPoint_changed eventOut #SFVector3f rotation_changed eventOut #SFRotation}

enabled:设置场景中是否激活该球面传感器。offset:设置对象被指点设备初始触发时的缺省旋转量,前三个分量(x、y、z)确定一个点,当前坐标系的原点与该点的连线为旋转轴,第四个分量为旋转角度。缺省值为(0.01.00.00.0)。autoOffset:是否在旋转中自动记忆上次旋转的终点朝向。为TRUE,自动记忆。isActive:指点设备是否点击对象,当设备为点击状态时,引发该事件,事件值为TRUE;当释放设备点击状态后,也引发该事件,事件值为FALSE。用户在浏览器窗口移动指点设备到对象上并单击,将在单击位置建立一个虚拟的空间球体表面,并且将当前空间坐标系的原点作为该球体的球心,将单击点与原点之间的距离作为球体的半径。对象将在这个轨迹球体表面上随指点设备产生旋转。trackPoint_changed:指点设备单击对象后引发该事件,事件值是球体表面上当前单击点的坐标位置。rotation_changed:指点设备在对象上、单击、或拖动引发该事件,事件值是球体表面上当前对象旋转的空间角度。注意:球面传感器在激活状态下,其他指点设备传感器将失效,不产生任何输出事件。例6-5,7-304、柱面传感器柱面传感器(CylinderSensor)用来检测用户操纵指点设备的动作,并将该动作转换成对象在围绕某根轴为旋转轴的一个柱面上所产生的旋转,使浏览者像是在围绕着一根轴旋转的圆柱体上进行观察,该旋转轴为CylinderSensor节点所在坐标系的y轴。CylinderSensor{ enabled TRUE #SFBool offset 0.0 #SFFloat autoOffset TRUE #SFBool minAngle 0.0 #SFFloat maxAngle -1.0 #SFFloat diskAngle 0.262 #SFFloat isActive eventOut #SFBool trackPoint_changed eventOut #SFVector3f rotation_changed eventOut #SFRotation}enabled:设置场景中是否激活该柱面传感器。offset:设置对象被指点设备初始触发时的缺省旋转量,该域为一个旋转角度。缺省值0.0。autoOffset:是否在旋转中自动记忆上次旋转的终点朝向。为TRUE,自动记忆。minAngle、maxAngle:设置对象被指点设备移动时最小和最大的旋转角度。若minAngle大于maxAngle,则旋转无限制。diskAngle:设置柱面传感器在圆盘行为和圆柱行为之间的切换角度。该域值决定对象的动作是像一个圆盘还是像一个圆柱在绕y轴旋转。缺省值0.262。注意:当用户移动指点设备到对象上并单击,浏览器将产生一个绕当前y轴旋转的虚拟圆柱,该圆柱底面和侧面之间的大小关系有diskAngle域值确定。可以把diskAngle域看做是一个虚拟圆柱体内部包含的圆锥的顶角,该圆锥的底面圆盘即为所在圆柱的顶面。如果用户选取圆柱体的顶或底面,则拖曳动作被解释为对象绕一个平面圆盘所发生的旋转;如果用户选取圆柱体的侧面部分,则拖曳动作被解释为对象绕一个圆柱所发生的旋转。isActive:指点设备是否点击对象,当设备为点击状态时,引发该事件,事件值为TRUE;当释放设备点击状态后,也引发该事件,事件值为FALSE。trackPoint_changed:指点设备单击对象后引发该事件,事件值是圆柱体表面上当前单击点的坐标位置。rotation_changed:指点设备在对象上、单击、或拖动引发该事件,事件值是圆柱体表面上当前对象旋转的空间角度。例6-6二、感知型传感器可视传感器VisibleSensor节点用来从浏览者所在方位感知一个立方体区域在当前场景中何时可见、何时不可见,并产生多种输出事件。VisibleSensor{

enabled TRUE #SFBool

center 0.00.00.0 #SFVec3f

size 0.00.00.0 #SFVec3f

isActive eventOut #SFBool

enterTime eventOut #SFTime

exitTime eventOut #SFTime}1、可视传感器enabled:设置场景中是否激活可视传感器。center:设置当前局部坐标系中一个被感知区域的中心点的三维坐标,缺省值为原点。size:设置当前局部坐标系中一个被感知区域的大小,缺省值为原点一个点的区域。注意:当size为(0.00.00.0)时,可视传感器将不产生任何事件输出。功能上相当于将其enabled域的值设置为FALSE。enterTime:输出用户由不可见区域到可见被感知区域的时间。exitTime:输出用户由可见区域到不可见被感知区域的时间。isActive:指示用户视场中是否可见该节点所设置的被感知区域。若用户可见该被感知立方体区域,则isActive产生输出事件,且事件值为TRUE;若用户不可见该被感知立方体区域,则isActive产生输出事件,且事件值为FALSE。例6-72、接近传感器接近感知器ProximitySensor节点,也称亲近度传感器节点,这个节点也设定了一个长方体区域,用来感知用户何时进入、退出和移动于这个区域。检测这个对象的接近程度,与预先设定检测数据比较,满足条件的时候输出事件,从而控制对象的行为。ProximitySensor{

enabled TRUE #SFBool

center 0.00.00.0 #SFVec3f

size 0.00.00.0 #SFVec3f

isActive eventOut #SFBool position_changed eventOut #SFBool orientation_changed eventOut #SFRotation

enterTime eventOut #SFTime

exitTime eventOut #SFTime}enabled:设置场景中是否激活接近传感器。center:检测区域的中心,默认值为原点。size:检测区域的大小。isActive:TRUE表示浏览者是否进入检测区域,FALSE表示浏览者是否离开检测区域。position_changed:浏览者当前的位置,随着浏览者进入或在检测区域里移动而随时修改。orientation_changed:浏览者当前的朝向,随着浏览者进入或在检测区域里移动而随时修改。enterTime:输出浏览者进入检测区域的时间。exitTime:输出浏览者离开检测区域的时间。例6-83、碰撞传感器碰撞传感器Collsion节点用来检测何时浏览者和虚拟空间中造型发生碰撞。该节点是一个群节点,它类似Group节点,可以有多个子节点在Children域中,但它又具有传感器节点的特性。碰撞传感器节点的功能是使浏览者看到虚拟空间物体与造型之间发生碰撞的现象。

Collision{ children [] #MFNode collide TRUE #SFBool proxy NULL #SFNode bboxcenter 0.00.00.0 #SFVec3f bboxSize -1.0-1.0-1.0 #SFVec3f collideTime eventOut #SFTime addChildren eventIn #MFNode removeChildren eventIn #MFNode}children:设置进行碰撞检测的子节点列表。collide:表示碰撞检测是否有效。proxy:域值为一“代理”,定义了一个可选造型,用来取代children域中的对象进行碰撞检测bboxCenter:包围Collision节点的所有子节点的包围盒的中心。其默认值为(0,0,0)。bboxSize:包围Collision节点的所有子节点的包围盒在x、y、z方向上的尺寸,其默认值为(-1,-1,-1)。addChildren:用于增加一个特别的子节点到Collision节点的子节点列表中。removeChildren:用于删除Collision节点的子节点列表中某个节点。collideTime:发送检测到的碰撞发生的时间。例6-9三、Script脚本节点Script脚本节点可以描述一些由用户自定义制作的检测器和插补器,能接受事件,对其处理,并输出处理后和结果。该节点又定义了一个包含程序脚本节点的域、事件出口和事件入口及描述用户自定义制作的检测器和插补器所做的事情。Script节点可以出现在文件的顶层或作为成组节点的子节点。Script{ url [] #MFString directOutput FALSE #SFBool mustEvaluate FALSE #SFBool #anynumbero

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论