Extensible 3D (X3D)
Part 1: Architecture and base components
7 Core component
内核组件
这部分组件的名称叫 "Core"。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 组件语句 Component statement)。
本条款描述了 ISO/IEC 19775 标准这部分中的 Core component (内核组件)。Core 组件支持 X3D 运行时系统的基本功能,这些功能包括抽象的基本节点类型、域类型、事件模型、路由。表 7.1 列出了这一条款的主要主题。
Core (内核)组件提供了所有 X3D 兼容执行所需要的最小的功能。Core component 提供了以下的抽象架构:
Core 组件是构成其它所有 X3D 组件的首要条件。
Core 组件可以支持不同的 层(levels),允许符合 X3D 结构、对象模型、事件模型的不同范围的执行模式。详细的信息参见 4. 概念 Concepts。
许多 X3D 节点例如 Background、TextureBackground、Fog、NavigationInfo、Viewpoint 都是可绑定子节点,这些节点都是由抽象节点类型 X3DBindableNode 衍生而成。这些节点具有一种独特的行为模式,每一类型的节点在同一时刻只有一个节点可以被绑定,这种绑定会影响到用户的体验。浏览器为每种可绑定节点单独维护一个堆栈。每种可绑定节点都包括一个 set_bind inputOnly 域和一个 isBound outputOnly 域。set_bind inputOnly 域用来把给定的节点移到堆栈的顶部或从堆栈中移去。发送到 set_bind inputOnly 域的 TRUE 值将把节点移到堆栈顶部;发送的 FALSE 值将把节点从堆栈顶部移去。当节点发生以下情况的时候将输出 isBound 事件:
这就是说,当给定节点变为被激活或停止活动时发送 isBound 事件。每个相应类型中,在其堆栈顶部的节点(最近绑定的节点)是活动节点,浏览器根据活动节点来设置场景的状态。如果堆栈为空(例如 X3D 文件中不包含相应类型的可绑定节点或堆栈已经被弹空),则用相应节点类型的缺省值来设置场景的状态。如果一个被实例化(使用 DEF/USE)的可绑定节点被绑定,则结果不确定。
以下描述了<可绑定节点(bindable node)>(包括 Background、Fog、NavigationInfo、Viewpoint)类型的堆栈绑定行为的规则:
传感器节点基于对场景图的外部输入产生事件。这包括用户输入,改变视点的环境,网络传输的信息,或系统计时。X3D 定义了以下类型的传感器:
传感器是层级中的子节点,因此可以作为组节点的子节点,参见 10.2.1, 组节点或子节点类型 Grouping and children node types。
每种传感器类型都定义了何时产生事件。当多个传感器产生事件后,场景图的状态 会按顺序根据的每个单个事件做出相应改变。如果多个传感器同时产生事件,而结果是基于事件顺序的,则场景图的状态将不确定。
不同类型的传感器之间可能会建立依赖性关系。举例来说,TouchSensor 可能会改变 VisibilitySensor 节点的位移,这种改变可能会影响 VisibilitySensor 节点的可见性状态。在执行时处理这种依赖性的详细描述,参见 4.4.8.3 执行模型 Execution model.
X3D 场景定义为由一系列的语句序列组织为的一个概念上的文件。文件中第一项是 Header 语句。第二项是 PROFILE 语句。PROFILE 语句后为一个或多个可选的 COMPONENT 语句。文件剩下的部分由 ISO/IEC 19775-1 中此部分定义的其它元素构成。可选的 META 语句紧跟 COMPONENT 语句,当没有 COMPONENT 语句时,可选的 META 语句紧跟 PROFILE 语句。其它的任何语句都要放置在上述的语句之后。
另外由 Inline 节点或使用 createX3DFromStream、createX3DFromString、createX3DFromUrl 载入的场景,其概貌声明的功能需求的, 应该和原来场景中功能需求集相同或更少;例如,这些动态载入的场景,其中的直接的组件申明或其概貌中间接包括的的组件的功能需要,不能超出包含其场景的场景原先申明的概貌和组件中指定的功能需要。
虽然 X3D 场景被描述为包含在一个文件中,但这个文件是概念上的,也可以按照 2.[I19775-2] 中描述的方法在运行时动态的创建。
Header 语句是一个包含以下元素的基于编码的语句:
不管这些信息的实际描述是基于哪种编码格式的,这些信息还是需要存储为可读的文本。
每个 X3D 应用都要在其执行的开头声明一个概貌(profile)。这个声明通知浏览器运行此应用所需要的组件及这些组件的支持层,这种机制下浏览器可以选择严格执行某个相应的一致性,并允许浏览器按照需要动态地载入适当的组件。如果 浏览器支持支持概貌和组件组合申明(参见 7.2.4.4 COMPONENT 语句),这个浏览器就可以再现这个场景,否则便失败。
概貌由 PROFILE 语句申明,PROFILE 语句放置在文件头部,紧跟在 Header 语句之后。PROFILE 语句的格式是:
PROFILE <name> (概貌 <名称>)
<name> 是一个不包含空格的字符串。
此标准中定义了以下概貌:
X3D 应用中可以明确声明运行这个应用程序所需要的额外的组件(Component)。这个特性用来在预定义的概貌中组合入额外的没有预定义的功能,例如可以在 Immersive 概貌中加入 Humanoid Animation(人性化动画)支持。如果浏览器支持支持概貌和组件组合申明,这个浏览器就可以再现这个场景,否则便失败。
组件由 COMPONENT 语句申明,COMPONENT 语句放置在文件头部,紧跟在 PROFILE 语句之后但放置在其它内容之前。COMPONENT 语句的格式是:
COMPONENT <name> <level> (组件 <名称> <层>)
<name> 是一个不包含空格的字符串,<level> 是个一正整数。
如果场景的概貌申明中已经间接包含了相应层(level)的组件支持,就不需要再进行单独的组件申明,但还是可以保留组件申明。
X3D 应用可以通过使用添加一个或多个 META 语句来申明的元数据(metadata),以定义场景相关的信息。这些语句不会影响场景图,只是用来提供一些额外的关于场景的信息。
元数据由 META 语句申明,META 语句放置在文件头部,紧跟在 PROFILE 语句和 COMPONENT 语句之后但放置在其它内容之前。META 语句的格式是:
META <key> <data> (元 <关键词> <数据>)
<key> 是用来识别元数据的字符串,<data> 是用来定义相应元数据的值的字符串。
X3DBindableNode : X3DChildNode { SFBool [in] set_bind SFTime [out] bindTime SFBool [out] isBound }
X3DBindableNode 是所有可绑定子节点的抽象基本节点类型,这些节点包括 Background、TextureBackground、Fog、NavigationInfo、Viewpoint。关于可绑定行为的描述参见 7.2.2, 可绑定子节点。
X3DNode { }
X3DNode 是 X3D 系统中所有节点的抽象基本节点类型。
X3DPrototypeInstance : X3DNode { }
X3DPrototypeInstance 是 X3D 系统中所有节点的原型实例的抽象基本节点类型。任何使用 PROTO 或 EXTERNPROTO 申明的用户定义的节点使用这种类型来实例化。X3DPrototypeInstance 节点可以放置在场景图中允许使用原型实例申明中第一个节点的任何地方。举例来说,如果其中第一个节点的基本类型是 X3DAppearanceNode,这个原型的实例就可以放置在场景图中任何允许使用外观(appearance)节点的位置(例如放置在 Shape 节点中)。
X3DSensorNode : X3DChildNode { SFBool [in,out] enabled; SFBool [out] isActive; }
X3DSensorNode 是所有传感器的抽象基本节点类型
Core 组件中没有定义具体的节点。
Core 组件提供 表 7.2 中规定的三个支持层(Level)。Level 1 的目标是提供严格的 VRML 97 域类型支持、事件模型、路由语法的兼容执行。Level 2 添加了 X3D 的新特性。
层 Level |
必备条件 | 节点/特性 | 支持 |
---|---|---|---|
1 | 无 | ||
X3DBindableNode (抽象) | n/a | ||
X3DField (抽象) | n/a | ||
X3DNode (抽象) | n/a | ||
X3DObject (抽象) | n/a | ||
X3DPrototypeInstance (抽象) | n/a | ||
X3DUrlObject (抽象) | n/a | ||
语句: Header PROFILE COMPONENT META |
完全支持 | ||
域类型 | 所有域类型,除了以下域类型:
SFVec2d MFVec2d SFVec3d MFVec3d |
||
事件模型 | 4.4.8, 事件模型 Event Model 中的规格中指定 | ||
路由 |
完全支持 |
||
原型 | 可选支持 | ||
2 | 无 | ||
所有 Level 1 Core 对象 | 和 Level 1 支持的相同 | ||
X3DRoute (抽象) | 待定 | ||
X3DScene (抽象) | 待定 | ||
所有域类型 | 所有域类型 | ||
事件模型 |
和 Level 1 支持的相同 |
||
路由 | 和 Level 1 支持的相同 | ||
原型 | 完全支持 |
翻译m17 保留版权 如需转载请联系 http://m17design.myetang.com/x3d