Extensible 3D (X3D)
Part 1: Architecture and base components

9 Networking component

网络组件

--- X3D separator bar ---

cube 9.1 介绍

9.1.1 名称

这部分组件的名称是 “Networking”。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。

9.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Networking component (网络组件)。这个组件定义了存取万维网(World Wide Web)上基于文件的资源或流资源的节点类型及其相关的其它特性。表 9.1 列出了这一条款的主要主题。

表 9.1 — 本条款的主题

cube 9.2 概念

9.2.1 URLs

2.[RFC1738] 中描述的 URL(Uniform Resource Locator - 统一资源定位),指定了一个特定服务器上的文件定位以及用来存取这个文件所使用的特定的协议(例如 http 协议)。在 ISO/IEC 19775 此部分中,大写的 URL 适用于 URL Uniform Resource Locator - 统一资源定位的网址),斜体的小写的 url 适用于可以包含 URL 或编码嵌入(in-line)的数据的域。

所有的 url 域可以包含多个字符串值。域中的字符串指示了多个位置,将按先后顺序在这些位置搜索数据。如果浏览器不能找到或解释第一个位置的数据,就可能去依次尝试第二个及后面的位置,直到有一个 URL 中包括可解释的数据。但 X3D 浏览器只会解释单一的 URL。如果没有找到可解释的 URL,节点类型定义产生缺省的行为。

组件扩展可以扩展浏览器的 URL 支持,例如支持 URN (Uniform Resource Name - 统一资源名),URN 是 URL 概念的扩展。URN 允许调用一个抽象的解决机制以定位资源(参见 2.[RFC2141])。这允许定位本地机器上的资源,或使用遵循平台规格标示的 URN 定位基于特定平台的资源。

更多的 URL 的信息参见 2.[RFC1738]

9.2.2 相对 URLs

相对 URL 按照 2.[RFC1808] 中描述的方式被处理。包含 URL 域的节点的基本文档是读取相关语句的那个 X3D 文件。包含 URL 域的 EXTERNPROTO 语句或节点的基本文档是:

  1. 一个 X3D 文件,如果该语句是原型定义的一部分,原型在这个 X3D 文件中被实例化。
  2. 包含脚本编码的文件,脚本编码将能建立新的场景图。
  3. 另外,如果是指读取相关语句的那个 X3D 文件,这种情况下 RURL 信息自己提供数据。

9.2.3 脚本语言协议

X3D 浏览器可以通过组件添加脚本支持。例如可以通过添加 Scripting component (脚本组件)引入 Script 节点。Script 节点的 url 域可以为不同的脚本语言提供不同的协议的支持。例如,以 ecmascript:(或者是不推荐的 javascript:)为前缀的脚本 url 可以包含 ECMAScript 源代码,并且在代码字符串中可以使用行终止符。在 ISO/IEC 19777 部分中,详细定义了每一种语言协议的语言绑定方法。和指定支持某种脚本的概貌一致的浏览器并不一定需要支持 Java 和 ECMAScript 这两种脚本语言。但是如果浏览器支持某种脚本语言,就应当遵循 ISO/IEC 19777 附件中相应的协议定义。以下范例说明了在单一 url 域中混合使用定制协议和标准协议(按先后顺序决定优先权)的方法:

#X3D V3.0 utf8
Script {
 url [ "ecmascript: ...", # custom protocol ECMAScript
 "http://bar.com/foo.js", # std protocol ECMAScript
 "http://bar.com/foo.class" ] # std protocol Java platform bytecode
}

在以上的例子中,"..." 表示内嵌的 ECMAScript 源代码。

9.2.4 浏览器选项

X3D 支持一系列用来设置浏览器的选项(option)。 这些选项是在启动时发送到浏览器的值,这些值将控制浏览器运行时的运作。如果 X3D 浏览器运行为 World Wide Web 网络浏览器的嵌入控件,浏览器选项可以被设置为 EMBED 标签或 OBJECT 标签中的 HTML PARAM value 值,或如果浏览器包含在其它应用程序中运行,可以通过相应应用程序规格例如设置文件或系统注册表实体来设置。

浏览器选项支持不是必需的,但是推荐使用。由于潜在的渲染系统的限制,某些浏览器可能不支持所有的选项。

表 9.2 列出了可用的 X3D 浏览器选项。

表 9.2 — 浏览器选项

名称 描述 类型/有效范围 缺省值
Antialiased 抗锯齿:如果可用,使用硬件抗锯齿 Boolean False
Dashboard 面板:显示浏览器用户导航界面 Boolean 由场景中绑定的 NavigationInfo 控制导航模式
MotionBlur 动态模糊:渲染时使用动态模糊效果 Boolean False
PrimitiveQuality 位元质量:为Box, Cone, Cylinder, Sphere 定义渲染质量 (细分层次)  Low, Medium, High Medium
QualityWhenMoving 移动时渲染质量:当摄像机移动时的渲染质量 Low, Medium, High, Same (as while stationary) Same
Shading 明暗模式:指定所有对象的明暗渲染模式 Wireframe, Flat, Gouraud, Phong Gouraud
SplashScreen 启动界面:显示浏览器的启动界面 Boolean 基于执行模式
TextureQuality 纹理质量:纹理帖图的显示质量 Low, Medium, High Medium

cube 9.3 抽象类型

9.3.1 X3DNetworkSensorNode

 
X3DNetworkSensorNode : X3DSensorNode {
  SFBool [in,out] enabled   TRUE
  SFBool [out]    isActive
}

这个抽象节点类型是衍生所有基于网络活动而产生事件的传感器的基础。

9.3.2 X3DUrlObject

X3DUrlObject : X3DObject {
  MFString [in, out] url [] [urn];
}

这个抽象界面衍生所有的包含定位在 World Wide Web 网络上的数据的节点,例如 AudioClipImageTextureInline

所有的 url 域可以包含多个字符串值。域中的字符串指示了多个位置,将按先后顺序在这些位置搜索数据。如果浏览器不能找到或解释第一个位置的数据,就可能去依次尝试第二个及后面的位置,直到有一个 URL 中包括可解释的数据。但 X3D 浏览器只会解释单一的 URL。如果没有找到可解释的 URL,节点类型定义产生缺省的行为。

更高层的组件可以扩展浏览器的 URL 支持,例如支持 URN (Uniform Resource Name - 统一资源名),URN 是 URL 概念的扩展集。URN 允许调用一个抽象的解决机制以定位资源(参见 2.[RFC2141])。这允许定位本地机器上的资源,或使用遵循平台规格标示的 URN 定位基于特定平台的资源。

更多关于 URL 的信息,参见 9.2.1, URLs

cube 9.4 节点参考

9.4.1 Anchor

Anchor : X3DGroupingNode, X3DBoundedObject { 
  MFNode   [in]     addChildren
  MFNode   [in]     removeChildren
  MFNode   [in,out] children       []       [X3DChildNode]
  SFString [in,out] description    ""
  MFString [in,out] parameter      []
  MFString [in,out] url            []       [urn]
  SFVec3f  []       bboxCenter     0 0 0    (-∞,∞)
  SFVec3f  []       bboxSize       -1 -1 -1 (0,∞) or -1 -1 -1 
}

当用户激活(例如点击)Anchor 节点的子节点中包含的某个几何体时,Anchor 组节点将检索到指定 URL 的内容。如果 URL 指向一个有效的 X3D 文件,则这个场景将替换掉 Anchor 节点所属的这个场景(除非 parameter 域以以下描述的情况改变这种行为)。如果检索到的是非 X3D 的数据,浏览器将决定如何处理这个数据;典型情况下,是把它转交给非 X3D 的浏览器。

用户激活 Anchor 节点包含的几何体的方式,具体依赖于指点设备并由 X3D 浏览器决定。典型情况下,单击指点设备将导致新的场景替换掉当前的场景。当 url 域为空的 Anchor 节点的子节点被选中时,不会发生任何事。激活时同时有多个 Anchor 和指点设备传感器的解决方法包括在 20.2, Concepts 概念 的描述中。

更多的 childrenaddChildrenremoveChildren 域的细节描述参见 10.2, Concepts 概念

Anchor 节点中的 description 域指定了 Anchor 节点的说明文本。浏览器指定的用户界面可以利用它来展示给用户关于此 Anchor 的更详细的信息。

parameter 域可以用来提供供浏览器解释的任何额外信息。每个字符串应由 "keyword=value" (“关键字=值”)字符串对构成。例如,一些浏览器允许为链接指定一个"target"(目标)以在 HTML 文档的另一部分显示此链接。这时 parameter 域可以设为:

Anchor { 
 parameter [ "target=name_of_frame" ];
  ...
}

Anchor 节点可以用来设定绑定场景中的初始视点,方法是指定一个以 "#ViewpointName" 结束的 URL,其中 "ViewpointName" 是 X3D 文件中定义的视点名。例如:

Anchor { 
  url "http://www.school.edu/X3D/someScene.wrl#OverView";
    children  Shape { geometry Box {} };
}

当 Anchor 节点的子节点几何体 (也就是Box) 被激活时,这个锚点能指定载入 X3D 文件 “someScene.wrl” 并且绑定初始的用户视角到名为 “OverView” 的 Viewpoint 节点。如果没有在 X3D 文件中发现相应命名的 Viewpoint 节点,则载入 X3D 文件并使用缺省的 Viewpoint 节点绑定规则确定视点(参见 2.[PART9])。

如果 url 域以 "#ViewpointName" 的形式指定(例如没有文件名),Anchor 节点的运行时命名适用范围中的指定的命名为 ("ViewpointName")的 Viewpoint 节点将被绑定(set_bind TRUE)。如果在 Anchor 节点的运行时命名适用范围中有多个同名的 Viewpoints 节点,则结果为不确定。如果 Anchor 节点不属于任何运行时命名适用范围,或同时属于多个运行时命名适用范围,则结果为不确定。运行时命名适用范围的详细信息参见 4.4.7, 运行时命名适用范围 Run-time name scope。关于浏览器如何从一个 Viewpoint 节点切换到另一个 Viewpoint 节点位移规则参见 23.3.5, Viewpoint 视点。例如:

Anchor { 
  url "#Doorway";
  children Shape { geometry Sphere {} };
}

当球体被激活时,会绑定视点到当前场景中由 "Doorway" 定义的视点。这种情况下,如果没有找到 Viewpoint 节点,则激活时不发生任何动作。

更详细的 url 域的信息参见 4.10.1 URLs

bboxCenterbboxSize 域指定了一个包裹所有 Anchor 子节点的边界盒。这个提示可以用作优化的目的。如果任何时候,指定的边界盒比实际的子节点的边界盒小,则结果不确定。缺省的 bboxSize 值(-1, -1, -1)暗示者没有制定边界盒,如果需要必须由浏览器来计算。更详细的关于 bboxCenter 域和 bboxSize 域的信息参见 10.2.2, Bounding boxes 边界盒

9.4.2 Inline

Inline : X3DChildNode, X3DBoundedObject {
  SFBool   [in,out] load       TRUE
  MFString [in,out] url        []       [urn]
  SFVec3f  []       bboxCenter 0 0      (-∞,∞)
  SFVec3f  []       bboxSize   -1 -1 -1 (0,∞) or -1 -1 -1
}

Inline 节点镶入一个存储于 World Wide Web 网络上的一个 X3D 场景到当前的场景中。如果概貌中支持 load 域,则 Inline 场景读取和显示的时间由 load 域决定。如果概貌不支持 load 域,则 Inline 场景读取和显示的时间不确定(例如读取场景可能延迟到 Inline 节点的边界盒相对观测者可见)。一旦 Inline 场景被载入,其子节点将被加入当前的场景,并被作为 Inline 节点的子节点渲染并交互;然而这些子节点并不对当前场景暴露,也就是说不能存取这些子节点的路由或 DEF 命名,除非这些命名使用 IMPORT 语句明确的导入到当前的场景(参见 4.4.6.2 IMPORT semantics IMPORT 语法)。

每一个指定的 URL 应该指向一个有效的 X3D 文件,这个有效的 X3D 文件应该像10.2.1, 组和子节点类型 Grouping and children node types 中描述的那样在最顶层包含一系列子节点,原型和路由。如果 URL 指向的不是一个 X3D 文件,或者这个 X3D 文件包含一个无效的场景,则结果不确定。

load 域被设置为 TRUE(缺省的域值)时,由 url 域指定的场景将立即被载入。当 load 域被设置为 FALSE 时,将不发生动作。这就可以通过向 load 域发送 TRUE 事件,明确地指定延后载入相应 URL (例如,由 ProximitySensor 或其它传感器发送的事件触发载入的进程)。如果向先前已经载入的 Inline 的 load 域发送 FALSE 事件,这个 Inline 的内容将会从场景图中卸载。

发送到 url 的事件可以用来改变由节点内嵌的场景。如果在 Inline 场景载入后设置新的 url 值,当前内嵌的场景将被卸载并载入新的 URL 指向的场景。

用户能使用 bboxCenterbboxSize 域为 Inline 节点指定边界盒。这可以提示浏览器,以用来进行裁切一类的优化。

9.4.3 LoadSensor

LoadSensor : X3DNetworkSensorNode {
  SFBool  [in,out] enabled   TRUE
  SFTime  [in,out] timeout   0
  MFNode  [in,out] watchList []   [X3DUrlNode]
  SFBool  [out]    isActive
  SFBool  [out]    isLoaded
  SFTime  [out]    loadTime
  SFFloat [out]    progress
}

LoadSensor 监视从网络上下载 URL 元素的过程以及是否下载成功。只有包含有效 URL 域的节点(例如 X3DUrlNode 的子)可以被列入 watchList 域。可以使用单一的 LoadSensor 来监视多个节点。

例如:

Shape {
   appearance Appearance {
      material Material {
         texture DEF TEX1 Texture { url "Amypic.png" }
      }
   }
   geometry Sphere {}
}
Shape {
   appearance Appearance {
      material Material {
         texture DEF TEX2 Texture { url "Bmypic.png" }
      }
   }
   geometry Sphere {}
}
DEF LS LoadSensor {
   watchList [ USE TEX1, USE TEX2 ]
}
ROUTE LS.loadTime TO MYSCRIPT.loadTime

这个域中列出了多个子节点,当所有的列出的子节点都被载入时或有某一个载入失败时会产生事件。如果希望获得某个单独的载入失败的信息,则需要使用多个 LoadSensor 节点。

将会按以下情况产生事件:

对于流模式的子节点,取得数据的第一帧就意味着载入成功(例如,浏览器可以渲染电影的第一帧或可以开始播放声音文件)。

Progress 域有以下的行为模式:

在所有情况下,只保证一个事件。

cube 9.5 支持层

Networking 组件提供 表 9.3 中指定的三个支持层。

表 9.3 — Networking 组件支持层

层Level 必备条件 节点/特性 支持
1 Core 1; Grouping 1
X3DUrlObject (Abstract) n/a
协议 file: protocol only
命名解决
Name resolution
相对 URL
Relative URLs
2 Core 1; Grouping 1
X3DUrlObject (Abstract) n/a
Anchor 所有域
Inline load 域外的所有域
协议
Protocols
必须支持 file:协议和http:协议
file: and http: protocols are required.
Name resolution 相对 URL; URN
Relative URLs; URNs
3 Core 1; Grouping 1
X3DNetworkSensorNode (Abstract) n/a
X3DUrlObject (Abstract) n/a
Anchor 和 Level 2 中支持的域相同
Inline 所有域
LoadSensor 所有域
Browser options 基于执行模式
Implementation-dependent
Protocols 和 Level 2 中支持的相同
Name resolution 和 Level 2 中支持的相同
--- X3D separator bar ---