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

11 Rendering component

渲染组件

--- X3D separator bar ---

cube 11.1 介绍

11.1.1 名称

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

11.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Rendering component(渲染组件)。其中了包括 TriangleSets、PointSets 之类的基本渲染图元,以及用来指定坐标索引、颜色、法线、纹理坐标的几何属性节点。表 11.1 列出了这一条款的主要主题。

表 11.1 — 本条款的主题

cube 11.2 概念

11.2.1 渲染图元

节点 TriangleSetTriangleFanSetTriangleStripSetIndexedLineSetPointSet 用来描绘多边形渲染系统中的一般的基本视觉对象。向 13, Geometry3D 组件14, Geometry2D 组件 中定义的复杂的几何体,都可以用这里的渲染图元(rendering primitive)组合来执行。Rendering 组件的这些节点提供建立任意几何体类型的基本服务。

所有渲染图元节点都由 X3DGeometryNode 类型衍生而来。

11.2.2 几何属性

一些几何节点包括 CoordinateColorNormalTextureCoordinate 这些几何属性(geometric property)节点类型。这些几何属性节点是定义的独立节点类型,可以在不同的几何节点中实例化和共享。其中 TextureCoordinate 节点类型的定义在 18, 纹理组件 Texturing component 中。

11.2.2.1 颜色

X3D 中的颜色指定为使用 RGB 颜色模型,其中每个颜色值由RGB三分量组成,每个颜色分量是一个范围在0.0 到1.0的浮点数。这个颜色模型中 (0,0,0) 表示黑,(1,1,1) 表示白。颜色也可以指定为使用 RGBA 颜色模型,其中包括第四个 alpha 透明度分量,Alpha 透明度值的范围是0.0 (完全透明) 到1.0 (完全不透明)更多的 RGB 颜色空间的信息参见 [FOLE]

11.2.2.2 坐标

X3D 中的坐标指定为一个右手正交坐标系中的 (x, y, z) 三元组。

11.2.2.3 法线

法线定义了几何片面上的垂线方向,以用来执行执行执行光照计算。法线可以指定为内容的一部分,也可以直接由浏览器从几何体上计算。当指定为内容的一部分时,应使用单位长度 。

11.2.3 一般几何域

某些几何节点有一些提供如何渲染此几何体的信息的域。这些域指定了顶点顺序,此形状是否是实体(solid),此形状包含的是否是凸多边形(convex faces),面之间呈现褶皱(crease)的角度,相应域名为 ccwsolidconvexcreaseAngle

ccw 域定义了几何体顶点坐标关于法线的顺序,法线向量用在进行光照模型计算方程中,可以由用户指定或自动生成的。如果 ccw 值为 TRUE,则法线应当遵循右手法则;亦即当从法线向量的反方向观察各顶点时(在 Shape 节点的局部坐标系中),各顶点相对于法线方向来说应呈逆时针排列。如果 ccw 值为 FALSE,则法线方向相反。如果法线不是自动生成而是由 Normal 节点指定,这时如果法线的方向和 ccw 域的设置不匹配,则结果不确定。

solid 域决定应该显示每个多边形的一面还是两面都显示。如果 solid 值为 FALSE,每个多边形不管从什么方向观察都可见(例如,将不会执行背面剔除(backface culling),并且对受光表面的两个面都执行光照)。如果 solid 值为 TRUE,每个多变性的可见性将按以下规则来决定:假定 V 为取景器在几何体的局部坐标系中的位置,N 为多边形的几何法线向量,P 为由多边形顶点定义的平面上的任意点(局部坐标系原点除外)。这时如果 (V 点乘 N) - (N 点乘 P) 大于零,则多边形可见;如果小于或等于零,则多边形不可见(背面剔除)。

convex指示是否形状中所有的多边形都是凸多边形TRUE 值为都是)。凸多边形是平面的,不自交的,所有的顶点的内角都小于 180 度。非平面的或自交的多边形,即使其 convex 域为 FALSE,也可能产生不确定的结果

creaseAngle(褶皱角)域定义了如何生成缺省的法线。 如果两个相邻面的几何法线的夹角小于褶皱角,则应计算法线并在两个面的交界边上进行平滑的明暗过渡;否则应计算法线并使明暗在交界边进行中断。例如当褶皱角为 0.5 弧度角时,如果相邻两个多边形面的几何法线的夹角小于 0.5 弧度角,则相邻两个多边形面的交界边应该是平滑的,否则呈现为小面构成的。褶皱角应大于或等于 0。

cube 11.3 抽象类型

11.3.1 X3DColorNode

X3DColorNode : X3DGeometricPropertyNode { 
}

这是在 X3D 中指定颜色的基本节点类型。

11.3.2 X3DComposedGeometryNode

X3DComposedGeometryNode : X3DGeometry3DNode { 
    SFNode [in,out] color           NULL
    SFNode [in,out] coord           NULL
    SFNode [in,out] normal          NULL
    SFNode [in,out] texCoord        NULL
    SFBool []       ccw             TRUE
    SFBool []       colorPerVertex  TRUE
    SFBool []       normalPerVertex TRUE
    SFBool []       solid           TRUE
}

这是 X3D 中复合三维几何体的(composed 3D geometry)基本节点类型。

复合几何体节点类型定义了一个抽象类型,这个抽象类型包括了用一系列定义独立组件的节点组成复合几何体。复合几何体 中可能提供有颜色、坐标、法线、纹理坐标。这些结合的渲染输出结果赖于具体的节点定义。然而一般所有的节点都应用以下的规则:

11.3.3 X3DCoordinateNode

X3DCoordinateNode : X3DGeometricPropertyNode {
}

这是 X3D 中所有坐标节点类型的基本节点类型。所有节点中指定的坐标都由此抽象节点类型衍生

11.3.4 X3DGeometricPropertyNode

X3DGeometricPropertyNode : X3DNode { 
}

这是 X3D 中所有几何属性节点类型的基本节点类型。

11.3.5 X3DGeometryNode

X3DGeometryNode : X3DChildNode { 
}

这是 X3D 中所有几何体的基本节点类型。

11.3.6 X3DNormalNode

X3DNormalNode : X3DGeometricPropertyNode { 
}

这是 X3D 中所有法线节点类型的基本节点类型。所有节点中指定的法线都由此抽象节点类型衍生

cube 11.4 节点参考

11.4.1 Color

Color : X3DColorNode { 
  MFColor [in,out] color [NULL] [0,1]
}

这个节点定义了一个可以在其它节点域中使用的 RGB 颜色集。

Color 节点只用来为单个几何形状指定多种颜色,例如 IndexedFaceSet 节点的面或顶点的颜色。而 Material 节点用来指定受光几何体的整体材质参数。如果为一个几何形状同时指定了 Material 节点和 Color 节点,则颜色值将替代材质中的漫反射(diffuse)成分。

RGB 纹理或 RGBA 纹理优先于颜色处理;如果为一个几何体同时指定了一个 RGB RGBA 纹理和一个 Color 节点,则结果导致 Color 节点被忽略。详细的光照方程参见 17.2.2, 光照模型 Lighting model

11.4.2 ColorRGBA

ColorRGBA : X3DColorNode { 
  MFColorRGBA [in,out] color [NULL] [0,1]
}

这个节点定义了一个可以在其它节点域中使用的 RGBA 颜色集。

ColorRGBA 节点只用来为单个几何形状指定多种带 alpha 透明度的颜色,例如 IndexedFaceSet 节点的面或顶点的颜色。而 Material 节点用来指定受光几何体的整体材质参数。如果为一个几何形状同时指定了 Material 节点和 ColorRGBA 节点, 则颜色值将替代材质中的漫反射(diffuse)和透明度(transparency)成分。

RGB 纹理或 RGBA 纹理优先于颜色处理;如果为一个几何体同时指定了一个 RGB RGBA 纹理和一个 Color 节点,则结果导致 Color 节点被忽略。详细的光照方程参见 17.2.2, 光照模型 Lighting model

11.4.3 Coordinate

Coordinate : X3DCoordinateNode { 
  MFVec3f [in,out] point [NULL] (-∞,∞)
}

这个节点定义了一个可用于基于顶点的几何节点中的 coord 域的三维坐标集,这些基于顶点的几何节点包括 TriangleFanSetTriangleSetTriangleStripSetIndexedFaceSetIndexedLineSetPointSet

11.4.4 IndexedLineSet

IndexedLineSet : X3DGeometryNode {
  MFInt32 [in]     set_colorIndex
  MFInt32 [in]     set_coordIndex
  SFNode  [in,out] color          NULL [X3DColorNode]
  SFNode  [in,out] coord          NULL [X3DCoordinateNode]
  MFInt32 []       colorIndex     []   [0,∞) or -1
  SFBool  []       colorPerVertex TRUE
  MFInt32 []       coordIndex     []   [0,∞) or -1
}

IndexedLineSet 节点呈现一个由折线(polyline)构成的三维几何体,这个折线是由节点中 coord 域中指定的三维点连接而成的。IndexedLineSet 使用 coordIndex 域中的索引指定连接 coord 中相应的顶点来构造这个折线。索引值为 "-1" 表示当前的折线结束和下一段折线的开始。最后一段折线可以(但不一定非)跟随一个 "-1"。IndexedLineSet 指定在局部坐标系中并受祖先变换的影响。

coord 域包含一个 Coordinate 节点,以指定线段集中使用的三维顶点。

线将不受光照影响,不能做纹理映射,不参与碰撞检测。线的宽度是基于执行模式的,每段线段都是实线(即不是虚线)。

如果 color 域不为 NULL(空),它就应包括一个 Color 节点。颜色将按以下规则应用到线上:

  1. 如果 colorPerVertex 值为 FALSE
    1. 如果 colorIndex 域不为空,IndexedLineSet 的每段折线使用一个颜色。colorIndex 域中有几个索引,IndexedLineSet 中就至少有几段折线。如果 colorIndex 域中的最大索引为 N,Color 节点中就应有 N+1 个颜色值。colorIndex 域中不应包含任何负值。
    2. 如果 colorIndex 域为空,Color 节点中的颜色值将被按顺序应用到 IndexedLineSet 的每段折线上。Color 节点中的颜色值的个数至少应和折线的段数一样多。
  2. 如果 colorPerVertex 值为 TRUE
    1. 如果 colorIndex 域不为空,颜色值将被应用到 IndexedLineSet 的每个顶点上,这时采用和 coordIndex 域被用来从 Coordinate 节点中选取并提供每个顶点的坐标的同样的方式。colorIndex 域至少应包含 coordIndex 域中的索引数,并应包含对应 coordIndex 域的折线结束标记(-1)。如果 colorIndex 域中的最大索引为 N,Color 节点中就应有 N+1 个颜色值。
    2. 如果 colorIndex 域为空,则使用 coordIndex 域来在 Color 节点中选择颜色值。如果 coordIndex 域中的最大索引为 N,Color 节点中就应有 N+1 个颜色值。

如果这个 IndexedLineSet 的 color 域为 NULL(空)并且有 Material 节点定义了 Appearance 外观,Material 材质节点的 emissiveColor 域自发光颜色将被用来画线。应用于 IndexedLineSet 节点光照方程的详细描述参见 17, 光组件 Lighting component

11.4.5 Normal

Normal : X3DNormalNode { 
  MFVec3f [in,out] vector [] (-∞,∞)
}

这个节点定义了一个用在某些几何节点(例如 IndexedFaceSet 和 ElevationGrid)的 vector 域中的三维表面法线向量集。这个节点包含一个由法线向量构成的多值域。法线应为单位长度。

11.4.6 PointSet

PointSet : X3DGeometryNode { 
  SFNode [in,out] color NULL [X3DColorNode]
  SFNode [in,out] coord NULL [X3DCoordinateNode]
}

PointSet 节点在局部坐标系中指定了三维点集,并且能为其中每个点都指定相关颜色。coord 域指定了一个 Coordinate 节点(或实例化引用一个 Coordinate 节点)。如果 coord 域指定了其它任何类型的节点,则结果不确定。PointSet 按顺序使用坐标。如果 coord 域为 NULL(空),则点集被认为空。

PointSet 不受光照影响,不能做纹理映射,不参与碰撞检测。每个点的大小是基于执行模式的。

如果 color 域不为 NULL(空),它就应 指定一个 Color 节点,其中最少要包括 coord 节点中包括的点数如果 color 域指定了其它任何类型的节点,则结果不确定。颜色值将顺序应用到每个点上。如果 Color 节点中的值的数量少于 Coordinate 节点中的的值的数量,则结果不确定。

如果这个 PointSet 节点的 color 域为 NULL(空)并且有 Material 节点定义了 Appearance 外观,Material 材质节点的 emissiveColor 域自发光颜色将被用来画点。光照方程的详细描述参见 17, 光组件 Lighting component

11.4.7 TriangleFanSet

TriangleFanSet : X3DComposedGeometryNode {
  SFNode  [in,out] color           NULL [X3DColorNode]
  SFNode  [in,out] coord           NULL [X3DCoordinateNode]
  SFFloat [in,out] creaseAngle     0    [0,∞)
  MFInt32 [in,out] fanCount        []   [3,∞)
  SFNode  [in,out] normal          NULL [X3DNormalNode]
  SFNode  [in,out] texCoord        NULL [X3DTextureCoordinateNode]
  SFBool  []       ccw             TRUE
  SFBool  []       colorPerVertex  TRUE
  SFBool  []       normalPerVertex TRUE
  SFBool  []       solid           TRUE
}

TriangleFanSet 节点描述了一个由三角形扇组成的三维形状,其中每个扇形都是沿着其第一个声明的顶点形成的扇形。

fanCount 域描述了每个扇形使用多少个 coordinate 域中的顶点。通过获取的 fanCount[n],coordinate 域中的坐标被分配给每个条带。fanCount 数组中的每个值应大于等于 3。如果值小于 3 将会出现错误

附图 11.1 显示了一个包含单一扇形的 TriangleFanSet 中的顶点顺序。

 

TriangleFanSet node

附图 11.1 — TriangleFanSet 节点

TriangleFanSet 指定在局部坐标系中并受祖先变换的影响。coordnormaltexCoord 域在 Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应按如下规则自动生成:如果 normalPerVertex 值为 TRUE,那么法线将为两个共享同一顶点的三角形的平均值。对应扇形的顶点,法线应为所有组成扇形的独立面法线的平均值。如果 normalPerVertex 值为 FALSE 那么法线将基于 ccw 域为当前三角形生成。

11.4.8 TriangleSet

TriangleSet : X3DComposedGeometryNode {
  SFNode  [in,out] color           NULL [X3DColorNode]
  SFNode  [in,out] coord           NULL [X3DCoordinateNode]
  SFFloat [in,out] creaseAngle     0    [0,∞)
  SFNode  [in,out] normal          NULL [X3DNormalNode]
  SFNode  [in,out] texCoord        NULL [X3DTextureCoordinateNode]
  SFBool  []       ccw             TRUE
  SFBool  []       colorPerVertex  TRUE
  SFBool  []       normalPerVertex TRUE
  SFBool  []       solid           TRUE
}

TriangleSet 节点描述了一个由一系列独立三角形的组成的三维形状。

coord 域包含了一个 Coordinate 节点以用来定义三角形的三维顶点。每个三角形由坐标节点中的三个连续顶点组成。如果坐标节点中不包括多个三坐标值组(即坐标值的数目不为三的倍数),则多余的节点依然 为节点并应被忽略。

附图 11.2 描述了一个由多个三角形组成的 TriangleSet 节点。此图也显示了顶点的顺序。一个箭头指向棱锥的顶点。注意顶点 3 和 4 情况。

TriangleSet node

Figure 11.2 — TriangleSet 节点

TriangleSet 指定在局部坐标系中并受祖先变换的影响。coordnormaltexCoord 域在 Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应生成为面的垂线,而不需考虑 normalPerVertex 的情况。

11.3.9 TriangleStripSet

TriangleStripSet : X3DComposedGeometryNode {
  SFNode  [in,out] color           NULL [X3DColorNode]
  SFNode  [in,out] coord           NULL [X3DCoordinateNode]
  SFFloat [in,out] creaseAngle     0    [0,∞)
  SFNode  [in,out] normal          NULL [X3DNormalNode]
  MFInt32 [in,out] stripCount      []   [3,∞)
  SFNode  [in,out] texCoord        NULL [X3DTextureCoordinateNode]
  SFBool  []       ccw             TRUE
  SFBool  []       colorPerVertex  TRUE
  SFBool  []       normalPerVertex TRUE
  SFBool  []       solid           TRUE
}

TriangleStripSet 描述了一个由三角形条带的组成的三维形状。

stripCount 域描述了每个条带使用多少个 coordinate 域中的顶点 。通过获取的 stripCount[n] ,coordinate 域中的坐标被分配给每个条带。stripCount 数组中的每个值应大于等于 3。如果值小于 3 将会出现错误

TriangleStripSet node

Figure 11.3 — TriangleStripSet 节点

TriangleStripSet 指定在局部坐标系中并受祖先变换的影响。coordnormaltexCoord 域在 Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应按如下规则自动生成:如果 normalPerVertex 值为 TRUE,那么法线将为两个共享同一顶点的三角形的平均值。如果 normalPerVertex 值为 FALSE 那么法线将基于 ccw 域为当前三角形生成。

cube 11.5 支持层

Rendering 组件提供 表 11.2 中规定的四个支持层(levels)。

表 11.2 — Rendering 组件支持层

层Level 必备条件 节点 支持
1 Core 1; Grouping 1
X3DComposedGeometryNode (抽象) n/a
X3DGeometricPropertyNode (抽象) n/a
X3DGeometryNode (抽象) n/a
X3DColorNode (抽象) n/a
X3DCoordinateNode (抽象) n/a
Color 所有域
ColorRGBA Alpha 分量可选支持
Coordinate 所有域
IndexedLineSet ccw 可选支持。 set_colorIndex 可选支持。set_coordIndex 可选支持。
PointSet 所有域
2 Core 1; Grouping 1
Level 1 中所有 Rendering 节点 所有域完全支持
TriangleFanSet 所有域
TriangleSet 所有域
TriangleStripSet 所有域
3 Core 1; Grouping 1
Level 2 中所有 Rendering 节点 Level 2 中支持的所有域
X3DNormalNode (抽象) n/a
Normal 所有域
4 Core 1; Grouping 1    
    Level 3 中所有 Rendering 节点 Level 3 中支持的所有域
    ColorRGBA Alpha 分量完全支持
--- X3D separator bar ---