Extensible 3D (X3D)
Part 1: Architecture and base components
22 Environmental sensor component
环境传感器组件
这部分组件的名称是 "EnvironmentalSensor"。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。
本条款描述了 ISO/IEC 19775 标准这部分中的 Environmental Sensor component(环境传感器组件)。表 22.1 列出了这一条款的主要主题。
环境传感器是根据环境中发生的事件的来发送事件的节点,环境中发生的事件通常是场景中两个元素间产生的交互。大多数环境传感器事件发生是因为观测者和场景之间的交互。然而,一个环境传感器事件也可能因场景和非可操纵的硬件部分(例如时钟)交互或者通过网络事件而引发。
以下是环境传感器的类型:
ProximitySensor 检测何时用户导航进入场景中的指定区域。ProximitySensor 自身并不可见。TimeSensor 是一个时钟,然而并没有相关的几何体或位置;它将用来开始或停止诸如传感器之类的基于时间的节点。VisibilitySensor 检测何时场景中制定的部分相对用户可见。
当环境传感器加入到变换层级以及呈现被更新前(例如从文件中读取或由一个脚本创建),它们应产生事件以指示任何此种传感器将检测的条件。不可见的传感器类型生成的初始事件的条件,在 22.4 节点参考 中针对各节点独立定义。
Collision 组节点检测用户何时何虚拟场景中的对象发生碰撞。邻近传感器、碰撞传感器、可见性传感器将独立运作,而不管是否存在其它的传感器,或检测内容重叠。更多信息见 23 导航组件 Navigation component。
X3DEnvironmentalSensorNode : X3DSensorNode { SFVec3f [in,out] center 0 0 0 (-∞,∞) SFBool [in,out] enabled TRUE SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [in,out] size 0 0 0 (-∞,∞) SFTime [out] enterTime SFTime [out] exitTime SFBool [out] isActive }
X3DEnvironmentalSensorNode 是环境传感器节点 ProximitySensor 和 VisibilitySensor 的基本类型。
ProximitySensor : X3DEnvironmentalSensorNode { SFVec3f [in,out] center 0 0 0 (-∞,∞) SFBool [in,out] enabled TRUE SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [in,out] size 0 0 0 [0,∞) SFTime [out] enterTime SFTime [out] exitTime SFVec3f [out] centerOfRotation_changed SFBool [out] isActive SFRotation [out] orientation_changed SFVec3f [out] position_changed }
ProximitySensor 节点在观测者进入,或退出一个划定范围的空间(由一个盒子定义),或在其中移动产生事件。通过向其发送一个值为 TRUE
或 FALSE
的 enabled 事件,邻近传感器可以被激活或禁止。被禁止的传感器不发送事件。
ProximitySensor 节点在观测者进入或退出由其 center
域和 size 域定义的矩形检测盒时产生 isActive TRUE
/FALSE
事件。浏览器应在 isActive 中插入位置和时间戳,位置和时间戳分别对应观测者最先和邻近度检测区域相交时的确切位置和确切的时间。center
域在对象空间中定义了邻近度检测区域的中心点。size 域指定的矢量定义了检测区域和边界的宽(x)、高(y)、深(z)。size
域的分量应大于或等于 0。ProximitySensor 节点受其父层的变换层级的影响。
当 isActive
TRUE
事件产生(用户进入检测盒)时就产生 enterTime 事件,当 isActive FALSE
事件产生(用户退出检测盒)时就产生 exitTime 事件。
当用户包含在邻近度检测区域中,且 EXAMINE 模式下使用的旋转中心(center of rotation)相对此 ProximitySensor 节点的坐标系改变时,centerOfRotation_changed 域发送事件。在被绑定的 Viewpoint 节点的旋转中心改变时,或新的视点被绑定时,或当用户通过浏览器用户节点改变旋转中心时,或 ProximitySensor 节点坐标系改变时,会导致发生此事件。centerOfRotation_changed 只在当前绑定的 NavigationInfo 类型包括 LOOKAT 导航模式时产生事件。更多信息见 Viewpoint 和 NavigationInfo。
当用户包含在邻近度检测区域中(包括进入和退出时),且用户位置和方向相对此 ProximitySensor 节点的坐标系改变时,position_changed 和 orientation_changed 域发送事件。浏览器导航时,或 ProximitySensor 节点坐标系改变时,或被绑定的 Viewpoint 节点的位置和方向改变时,会导致环境变化即观测者的移动。
每一个 ProximitySensor 节点行为独立于所有其它 ProximitySensor 节点。每一个激活的 ProximitySensor 节点都受观测者移动的影响,都接收或发送事件,这可能导致多个 ProximitySensor 节点同时接收和发送事件。ProximitySensor 节点不象 TouchSensor 节点,在场景图“捕获”事件时 ProximitySensor 节点没有上下优先级的概念。
实例化的(使用 DEF/USE)ProximitySensor 节点使用所有检测盒的并集来检测进入和退出。多个实例化 ProximitySensor 节点将监测所有监测盒的实例的进入和退出,并发送相应的事件。对于不重叠的检测盒,position_changed 和 orientation_changed 事件根据监测到邻近值的监测盒的相关坐标系计算。然而,如果多个实例化的 ProximitySensor 节点中有任何的重叠,则结果未定义。
包围整个场景的 ProximitySensor 节点的
enterTime 等效与进入场景的时间,可用于场景被载入后立刻开始一个动画和行为。检测盒容积为 0(例如任何 size
域的分量为 0.0)的 ProximitySensor 节点将不产生事件。这与设置 enabled
域为 FALSE
等效。
从一个 X3D 文件中读取 ProximitySensor 节点时,如果此节点为激活且观测者正好位于邻近检测的区域中,则应产生 isActive
TRUE
、position_changed、orientation_changed、enterTime
事件。当 ProximitySensor 节点被加入到变换层级时,如果此节点为激活且观测者正好位于邻近检测的区域中,则应产生 isActive
TRUE
、position_changed、orientation_changed、enterTime
事件。当 ProximitySensor 从变换层级中移除时,如果此节点为激活且观测者正好位于邻近检测的区域中,应产生 isActive FALSE
、position_changed、orientation_changed、exitTime
事件。
VisibilitySensor : X3DEnvironmentalSensorNode { SFVec3f [in,out] center 0 0 0 (-∞,∞) SFBool [in,out] enabled TRUE SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [in,out] size 0 0 0 [0,∞) SFTime [out] enterTime SFTime [out] exitTime SFBool [out] isActive }
VisibilitySensor 节点检测用户在场景中导航时一个矩形盒的可见性的改变。VisibilitySensor 典型的用法是当用户能看见场景中指定的对象或范围时,激活或禁止某个行为或动画。一般这样做的目的是为了吸引注意或改善性能。
enabled 域激活或禁止 VisibilitySensor 节点。如果 enabled 设置为 FALSE
,VisibilitySensor
节点将不发送事件。如果 enabled 为 TRUE
,VisibilitySensor
节点检测指定的检测盒的可见性状态的改变并通过 isActive 域发送事件。当检测盒的任何部分在渲染视图中显示时,就输出
isActive TRUE
事件。当检测盒对渲染视图没有影响时,输出 FALSE
事件。浏览器应保证当 isActive
为 FALSE
时,检测盒对渲染视图完全没有影响。当 isActive 为 TRUE
时,浏览器可能出错但并不限制。例如检测盒可能也可以影响渲染效果。
域 center 和 size 定义了检测盒中心的空间位置和检测盒的范围(即宽、高、深)。size 域的分量应大于或等于 0。VisibilitySensor 节点的检测盒受其父层的变换层级的影响。
当 isActive
TRUE
事件产生时就产生 enterTime 事件,当 isActive FALSE
事件产生时就产生 exitTime 事件。从一个 X3D 文件中读取 VisibilitySensor
节点时,如果此节点为激活且可视性检测盒可见,则应产生 isActive TRUE
、enterTime
事件。当 VisibilitySensor节点被加入到变换层级时,如果此节点为激活且可视性检测盒可见,则应产生 isActive
TRUE
、enterTime 事件。当 VisibilitySensor
从变换层级中移除时,如果此节点为激活且可视性检测盒可见,则应产生 isActive FALSE、
exitTime
事件。
每一个 VisibilitySensor 节点行为独立于所有其它 VisibilitySensor节点。每一个激活的 VisibilitySensor 节点都受观测者移动的影响,都接收或发送事件,这可能导致多个 VisibilitySensor节点同时接收和发送事件。不象 TouchSensor 节点,在场景图“捕获”事件时 VisibilitySensor 节点没有上下优先级的概念。实例化的(使用 DEF/USE)VisibilitySensor 节点使用所有由它们所有的实例定义的检测盒的并集。实例化的 VisibilitySensor 将监测所有监测盒可视性的变化,并发送相应的事件。
Environmental Sensor 组件提供 表 22.2 中规定的三个支持级别(levels)。Level 1 的目的是通过提供一个简化的 ProximitySensor 节点来自动激活动画。Level 2 提供了环境传感的完全支持。
表 22.2 — Environmental sensor component support levels
级别 Level |
必备条件 | 节点 | 支持 |
---|---|---|---|
1 | Core 1 Time 1 Grouping 1 Navigation 1 |
||
X3DEnvironmentSensorNode(抽象) | n/a | ||
ProximitySensor | position_changed 可选地支持。 orientation_changed 可选地支持。 |
||
2 | Core 1 Time 1 Grouping 1 Navigation 1 |
||
Level 1 的所有 Environmental Sensor 节点 | Level 1 中支持的所有域 | ||
ProximitySensor | 所有域完全支持 | ||
VisibilitySensor | 所有域完全支持 |
翻译 m17 保留版权 如需转载请联系 http://17de.com/x3d/