Chinaunix首页 | 论坛 | 博客
  • 博客访问: 571911
  • 博文数量: 208
  • 博客积分: 3286
  • 博客等级: 中校
  • 技术积分: 1780
  • 用 户 组: 普通用户
  • 注册时间: 2007-09-24 20:38
文章分类

全部博文(208)

文章存档

2012年(7)

2011年(28)

2010年(21)

2009年(76)

2008年(65)

2007年(11)

我的朋友

分类:

2009-07-30 13:35:35

虚拟现实x3d简明教程3 收藏
 
第三节 邻近检测器

    本节讨论邻近检测器(proximitySensor),当用户进入或离开邻近检测器所划定的区域时就会触发它。ProximitySensor节点用法如下:当用户摄像机走进或离开的监测区域, 或在监测区域中移动时, ProximitySensor发送事件. (用一个盒子来定义的这个区域的大小) 提示: 使用USE实例化引用的效果是相加的, 但不重叠. 提示: 可以先使用Transform 来改变监测区域的位置. 提示: 一旦场景载入, 监测就开始. DEF [DEF ID #IMPLIED] DEF给这个节点定义了唯一的ID, 这样在其它节点里就可以引用这个节点. 提示: 为DEF命名时,使用有意义的描述性的名称可以帮助规范文件, 以提高文件可读性. USE [USE IDREF #IMPLIED] USE用来引用DEF定义的节点ID, 同时忽略其它的属性和子对象. 提示: 使用USE引用其它的对象而不是复制节点可以提高性能. 警告: 使用USE的代码不要包括DEF或其他的属性值! enabled [enabled: accessType inputOutput, type SFBool (true|false) "true"] 设置传感器节点是否有效. center [center: accessType inputOutput, type SFVec3f CDATA "0 0 0"] 从局部坐标系统原点的位置偏移. size [size: accessType inputOutput, type SFVec3f CDATA "0 0 0"] 代理传感器盒的尺寸. 提示: size 0 0 0 值将使传感器失效. isActive [isActive: accessType outputOnly, type SFBool (true|false) #FIXED ""] 当用户摄像机走进或离开的监测区域时发送isActive true/false 事件. position_changed [position_changed: accessType outputOnly, type SFVec3f CDATA #FIXED ""] 当用户摄像机在监测区域中移动时, 发送相对于中心的 translation事件. orientation_changed [orientation_changed: accessType outputOnly, type SFRotation CDATA #FIXED ""] 当用户摄像机在监测区域中转动时, 发送相对于中心的rotation事件. enterTime [enterTime: accessType outputOnly, type SFTime CDATA #FIXED ""] 当用户摄像机走进监测区域时发送时间事件. exitTime [exitTime: accessType outputOnly, type SFTime CDATA #FIXED ""] 当用户摄像机走进或离开的监测区域发送时间事件. containerField [containerField: NMTOKEN "children"] containerField 是field标签的前缀, 表明了子节点和父节点的关系. 范例: geometry Box, children Group, proxy Shape. containerField 属性只有在X3D场景用XML编码时才使用. class [class CDATA #IMPLIED] class 是用空格分开的类的列表, 保留给XML样式表使用. 只有X3D场景用XML编码时才支持class 属性.     我们的出发点是第一节中建造的境界helloworld,它是由方块、球体和圆柱这三个物体构成的静态世界,现在在球体周围增加一个邻近检测区: ProximitySensor的名字为comeCloser,邻近区的中心和球体的球心重合,形状为正方体,边长为4米,是球体直径的两倍。当用户走进球体时就会触发这个邻近检测器,检测器发出isActive事件,我们把这个事件出口通过路由指向script节点(用来绑定视点2): 随后,我们在邻近检测器的出事件isActive和脚本节点comeCloserscript的入事件enterProximitySensorIsActive之间建立路由,后者收到事件后执行函数enterProximitySensroIsActive,函数发出bindView2出事件,这个出事件通过路由连接到视点节点View2: 也就是说,一旦用户进入邻近区,境界的当前视点将转换成View2.这个由两个视点、三个物体、一个邻近检测器和一个脚本节点组成的境界的完整代码如下: 打开此文件,面向球体一直走过去,当你刚刚感到靠近球体时,会突然感到自己后退了一大步(或者说物体跳到前方更远的地方),这表明邻近检测器已经检测到你的靠近,它把这件事通知脚本节点,脚本节点把视点View2绑定成当前视点,从而使你感到视点突然改变。

 

 

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/zhuzhao/archive/2008/07/10/2635224.aspx

阅读(549) | 评论(0) | 转发(0) |
0

上一篇:虚拟现实x3d简明教程2

下一篇:x3d基本概念

给主人留下些什么吧!~~