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

12 Shape component

形组件

--- X3D separator bar ---

cube 12.1 节点

12.1.1 名称

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

12.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Shape component(形组件)。Shape 组件定义了几何体以及其附带的视觉属性和其受场景环境的影响。表 12.1 列出了这一条款的主要主题。

表 12.1 — 主题

cube 12.2 概念

12.2.1 Shape 节点

Shape 节点把一个几何节点和定义此几何体外观的节点联合起来。为了自身可以被看见,Shape 节点必须为变换层级的一部分,反之如果可以看见任何几何体,则变换层级中必须包括相应的 Shape 节点(只有 Shape 节点和 24 Environmental effects 中的背景节点可以渲染出可见结果)。Shape 节点在 geometry 域中包括且只包括一个类型为 X3DGeometryNode 的几何节点。Shape 节点由抽象基本类型 X3DShapeNode 衍生。

12.2.2 Appearance 节点

Shape 节点可以指定一个 Appearance 节点以描述应用到 Shape 几何体上的外观(appearance)属性。所有 Apperance 节点有效的子节点都由抽象基本类型 X3DAppearanceChildNode 衍生。

Appearance 节点的 material 域中可以指定以下类型的节点:

通过创建新的由 X3DMaterialNode 抽象类型衍生的节点可以扩展此可用节点集。

Appearance 节点可以在其 texture 域中指定一个纹理帖图。纹理域中有效的值为 X3DTextureNode 的衍生节点,包括:

通过创建新的由 18.3.2 X3DTextureNode 中定义的 X3DTextureNode 抽象类型衍生的节点可以扩展此可用节点集。

Appearance 节点的 textureTransform 域中可以指定类型为 X3DTextureTransformNode (见 18.3.4 X3DTextureTransformNode)的节点:包括:

外观属性和几何节点所指定的属性之间的相互作用见 13 Geometry3D component14 Geometry2D component

Appearance 节点可以为几何体的外观指定额外的信息。可以为线或填充区域定义额外的属性。这些属性在以下的节点 linePropertiesfillProperties 中的相应域中定义:

cube 12.3 抽象类型

12.3.1 X3DAppearanceChildNode

X3DAppearanceChildNode : X3DNode { 
  SFNode [in,out] metadata NULL [X3DMetadataObject]
}

这是子节点为 X3DAppearanceNode type 类型的节点所用的基本类型。

12.3.2 X3DAppearanceNode

X3DAppearanceNode : X3DNode {
  SFNode [in,out] metadata NULL [X3DMetadataObject]
}

这是所有 Appearance 节点所用的基本类型。

12.3.3 X3DMaterialNode

X3DMaterialNode : X3DAppearanceChildNode {
  SFNode [in,out] metadata NULL [X3DMetadataObject]
}

这是所有 Material 节点所用的基本类型。

12.3.4 X3DShapeNode

X3DShapeNode : X3DChildNode, X3DBoundedObject {
  SFNode  [in,out] appearance NULL     [X3DAppearanceNode]
  SFNode  [in,out] geometry   NULL     [X3DGeometryNode]
  SFNode  [in,out] metadata   NULL     [X3DMetadataObject]
  SFVec3f []       bboxCenter 0 0 0    (-∞,∞)
  SFVec3f []       bboxSize   -1 -1 -1 [0,∞) or −1 −1 −1
}

这是所有 Shape 节点所用的基本类型。

cube 12.4 节点参考

12.4.1 Appearance

Appearance : X3DAppearanceNode { 
  SFNode [in,out] fillProperties   NULL [FillProperties]
  SFNode [in,out] lineProperties   NULL [LineProperties]
  SFNode [in,out] material         NULL [X3DMaterialNode]
  SFNode [in,out] metadata         NULL [X3DMetadataObject]
  SFNode [in,out] texture          NULL [X3DTextureNode]
  SFNode [in,out] textureTransform NULL [X3DTextureTransformNode]
}

Appearance 节点指定了几何体的视觉效果。这个节点的每个域的值都可以为 NULL(空)。然而如果域是非 NULL,则应包括一个适当类型的节点。

如果指定了 material 域,则其中应包含一个 Material 节点。如果 material 域为 NULL 或未指定,光照将被关闭(引用此 Appearance 的对象在渲染中将忽略所有的灯光),此未受光照的对象色彩为 (1, 1, 1)。X3D 光照模型的细节见 17 Lighting component

如果指定了 texture 域,则其中应包含一个为纹理类型的节点(见 18 Texturing component)。如果纹理节点为 NULLtexture 域未指定,引用此 Appearance 的对象将没有纹理。

如果指定了 textureTransform 域,则其中应包含一个 18.4.8 TextureTransform 中定义的 TextureTransform 节点。如果 textureTransformNULL 或未指定,则 textureTransform 域无效。

如果指定了 lineProperties 域,则其中应包含一个 12.4.3 LineProperties 中定义的 LineProperties 节点。如果 lineProperties NULL 或未指定,则 lineProperties 域无效。

如果指定了 fillProperties 域,则其中应包含一个 12.4.2 FillProperties 中定义的 FillProperties 节点。如果 fillProperties NULL 或未指定,则 fillProperties 域无效。

12.4.2 FillProperties

FillProperties : X3DAppearanceChildNode { 
  SFBool  [in,out] filled     TRUE
  SFColor [in,out] hatchColor 1 1 1 [0,1]
  SFBool  [in,out] hatched    TRUE
  SFInt32 [in,out] hatchStyle 1     [0,∞)
  SFNode  [in,out] metadata   NULL  [X3DMetadataObject]
}

FillProperties 节点在所有多边形区域上指定了添加在相应 Appearance 节点中由其它域指定的外观顶层的额外属性。结果就是,阴影线(hatch)将添加在已经渲染的几何外观的顶层。阴影线不受光照影响。

hatchStyle 域将选择一个阴影线样式(hatch pattern),此阴影线样式及其编号采用 International Register of Graphical Items 中的定义(见 2.[REG])。阴影线将使用 hatchColor 域指定的色彩来渲染。

只有当相应的 filled 和/或 hatched 域值为 TRUE 时,相关的几何体才应被填充(filled)并/或画阴影线(hatched)。

12.4.3 LineProperties

LineProperties : X3DAppearanceChildNode { 
  SFBool  [in,out] applied              TRUE
  SFInt32 [in,out] linetype             1    [1,∞)
  SFFloat [in,out] linewidthScaleFactor 0    [-∞,∞)
  SFNode  [in,out] metadata             NULL [X3DMetadataObject]
}

LineProperties 节点指定了应用到所有的线几何体上的额外属性。只有在 applied 域值为 TRUE 时线型(linetype)和线宽(linewidth)才被应用。当 applied 域值为 FALSE 时,将产生一个固定标宽的线。线的颜色由相关的 Material 节点指定。

linetype 域选择一个线型样式(line pattern),线型样式及其编号采用 International Register of Graphical Items 中的定义(见 2.[REG])。X3D 浏览器应支持其中的 1 至 5 号线型,并设其 1 号线型为缺省值。X3D 浏览器可以支持其它任何已注册的线型。如果要求使用的线型不支持,则用 1 号线型。表 12.2 列出了 Linetype Section of the International Register of Graphical Items 中定义的前 16 号线型。

表 12.2 — International registry of graphical items linetypes

1 Solid
2 Dashed
3 Dotted
4 Dashed-dotted
5 Dash-dot-dot
6 (single)
7 (single dot)
8 (double arrow)
10 (chain line)
11 (center line)
12 (hidden line)
13 (phantom line)
14 (break line 1)
15 (break line 2)
16 User-specified dash pattern

linewidthScaleFactor 是一个乘数值,将以此为一个线宽缩放因子来缩放基于浏览器的线的标宽。结果值应随后被映射到最接近的可用的线宽。小于或等于 0 的值将引用最小的可用的线宽。

12.4.4 Material

Material : X3DMaterialNode { 
  SFFloat [in,out] ambientIntensity 0.2         [0,1]
  SFColor [in,out] diffuseColor     0.8 0.8 0.8 [0,1]
  SFColor [in,out] emissiveColor    0 0 0       [0,1]
  SFNode  [in,out] metadata         NULL        [X3DMetadataObject]
  SFFloat [in,out] shininess        0.2         [0,1]
  SFColor [in,out] specularColor    0 0 0       [0,1]
  SFFloat [in,out] transparency     0           [0,1]
}

Material 节点指定了相关几何节点所用的表面材质属性,并用于渲染时所用的 X3D 光照方程。17 光照组件 Lighting component 包含了 X3D 光照模型方程的细节描述。

所有 Material 节点中的域值的范围为 0.0 至 1.0。

Material 节点中的域决定了如何创建颜色以表现光照对一个对象的影响:

  1. ambientIntensity(环境亮度)域指定了此表面应反射多少从光源发出的环境光。环境光是全向的,光亮只基于光源的数量而不考虑光源的位置。环境颜色按 ambientIntensity × diffuseColor 计算。
  2. diffuseColor(漫反射颜色)域根据表面和光源的角度反射 X3D 光源。光线越直接的照射到表面上,则反射越多的漫反射光。
  3. emissiveColor (发射颜色)域模仿了“发光”对象。这可以用来显示预光照过的模型(其中空间的光线能量将外在地计算),或用来显示科学数据。
  4. specularColor(镜面反射颜色)和 shininess(光泽度)域决定了反射高光(例如苹果上的锃亮的光点)。当光到表面的角度与表面和观测者的角度接近时,specularColor 将被加入漫反射颜色和环境颜色的计算。较低的光泽度产生较柔和的发光,较高的光泽度值将导致尖锐的较小面积的高光。
  5. transparency(透明度)域指定了一个对象如何“清晰”,1.0 值为完全透明,0.0 为完全不透明。

12.4.5 Shape

Shape : X3DShapeNode {
  SFNode  [in,out] appearance NULL     [X3DAppearanceNode]
  SFNode  [in,out] geometry   NULL     [X3DGeometryNode]
  SFNode  [in,out] metadata   NULL     [X3DMetadataObject]
  SFVec3f []       bboxCenter 0 0 0    (-∞,∞)
  SFVec3f []       bboxSize   -1 -1 -1 [0,∞) or −1 −1 −1
}

Shape 节点中有两个域,appearance(外观)和 geometry(几何体),用以建立场景中可渲染的对象。appearance 域中包含一个 Appearance 节点,用以指定将应用到几何体上的视觉属性(例如材质和纹理)。geometry 域中包含一个几何节点。指定的几何节点将根据所应用的外观节点来渲染。更多信息见 12.2 概念 Concepts

17 Lighting component 中包含了 X3D 光照模型以及 Appearance 节点和几何节点之间相互作用的信息细节。

如果 geometry 域为 NULL,则对象将不会被渲染。

bboxCenter 域和 bboxSize 域 指定了一个包裹 Shape 节点的几何体的边界盒。这是一个可以用作优化目的的提示。如果指定的边界盒在某一时间中比其子节点的实际边界盒小,则结果不确定。缺省的 bboxSize 值 (-1, -1, -1) 意味着没有指定边界盒,如果需要,边界盒将由浏览器计算。关于 bboxCenter 域和 bboxSize 域的详细描述包括在 10.2.2 边界盒 Bounding boxes 中。

cube 12.5 支持级别

Shape 组件提供 表 12.2 中规定的三个支持级别(levels)。

表 12.2 — Shape 组件支持级别

级别
Level
必备条件 节点/特性 支持
1 Core 1
Rendering 1
Texturing 1
X3DAppearanceChildNode(抽象) n/a
X3DAppearanceNode(抽象) n/a
  X3DMaterialNode(抽象) n/a
X3DShapeNode(抽象) n/a
Appearance textureTransform 可选支持。lineProperties 不支持。fillProperties  不支持。
Material ambientIntensity 可选支持。shininess 可选支持。specularColour 可选支持。emissiveColour 不等于 (0,0,0) 且diffuseColor 等于 (0,0,0) 的材质为不受光照的影响材质。单比特位透明度;透明度值 ≥ 0.5 为透明。
Shape 所有域的完全支持
2 Core 1
Rendering 1
Texturing 1
 
Level 1 的所有组节点,其中 Appearance 的定义略有不同 所有域的完全支持
    Appearance fillProperties 不支持
    LineProperties 所有域的完全支持
3 Core 1
Rendering 1
Texturing 1
 
All Level 2 Appearance nodes 所有域的完全支持
    FillProperties 所有域的完全支持
--- X3D separator bar ---