Extensible 3D (X3D)
Part 1: Architecture and base components
11 Rendering component
渲染组件
这部分组件的名称是 “Rendering”。当在 COMPONENT 语句中引用这个组件时需要使用这个名称(参见 7.2.3.4 Component 语句)。
本条款描述了 ISO/IEC 19775 标准这部分中的 Rendering component(渲染组件)。其中了包括 TriangleSets、PointSets 之类的基本渲染图元,以及用来指定坐标索引、颜色、法线、纹理坐标的几何性质节点。表 11.1 列出了这一条款的主要主题。
节点 TriangleSet、TriangleFanSet、TriangleStripSet、IndexedLineSet、PointSet 用来描绘多边形渲染系统中的一般的基本视觉对象。向 13, Geometry3D 组件 和 14, Geometry2D 组件 中定义的复杂的几何体,都可以用这里的渲染图元(rendering primitive)组合来执行。Rendering 组件的这些节点提供建立任意几何体类型的基本服务。
所有渲染图元节点都由 X3DGeometryNode 类型衍生而来。
一些几何节点包括 Coordinate、Color、Normal、TextureCoordinate 这些几何性质(geometric property)节点类型。这些几何性质节点是定义的独立节点类型,可以在不同的几何节点中实例化和共享。其中 TextureCoordinate 节点类型的定义在 18, 纹理组件 Texturing component 中。
X3D 中的颜色指定为使用 RGB 颜色模型,其中每个颜色值由RGB三分量组成,每个颜色分量是一个范围在0.0 到1.0的浮点数。这个颜色模型中 (0,0,0) 表示黑,(1,1,1) 表示白。颜色也可以指定为使用 RGBA 颜色模型,其中包括第四个 alpha 透明度分量,Alpha 透明度值的范围是0.0 (完全透明) 到1.0 (完全不透明)。更多的 RGB 颜色空间的信息参见 [FOLE] 。
X3D 中的坐标指定为一个右手正交坐标系中的 (x, y, z) 三元组。
法线定义了几何片面上的垂线方向,以用来执行执行执行光照计算。法线可以指定为内容的一部分,也可以直接由浏览器从几何体上计算。当指定为内容的一部分时,应使用单位长度 。
某些几何节点有一些提供如何渲染此几何体的信息的域。这些域指定了顶点顺序,此形状是否是实体(solid),此形状包含的是否是凸多边形(convex faces),面之间呈现褶皱(crease)的角度,相应域名为 ccw、solid、convex、creaseAngle。
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。
X3DColorNode : X3DGeometricPropertyNode { }
这是在 X3D 中指定颜色的基本节点类型。
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)基本节点类型。
复合几何体节点类型定义了一个抽象类型,这个抽象类型包括了用一系列定义独立组件的节点组成复合几何体。复合几何体 中可能提供有颜色、坐标、法线、纹理坐标。这些结合的渲染输出结果赖于具体的节点定义。然而一般所有的节点都应用以下的规则:
X3DCoordinateNode : X3DGeometricPropertyNode { }
这是 X3D 中所有坐标节点类型的基本节点类型。所有节点中指定的坐标都由此抽象节点类型衍生。
X3DGeometricPropertyNode : X3DNode { }
这是 X3D 中所有几何性质节点类型的基本节点类型。
X3DGeometryNode : X3DChildNode { }
这是 X3D 中所有几何体的基本节点类型。
X3DNormalNode : X3DGeometricPropertyNode { }
这是 X3D 中所有法线节点类型的基本节点类型。所有节点中指定的法线都由此抽象节点类型衍生。
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。
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。
Coordinate : X3DCoordinateNode { MFVec3f [in,out] point [NULL] (-∞,∞) }
这个节点定义了一个可用于基于顶点的几何节点中的 coord 域的三维坐标集,这些基于顶点的几何节点包括 TriangleFanSet、TriangleSet、TriangleStripSet、IndexedFaceSet、IndexedLineSet、PointSet。
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 节点。颜色将按以下规则应用到线上:
FALSE:
TRUE
:如果这个 IndexedLineSet 的 color 域为 NULL(空)并且有 Material 节点定义了 Appearance 外观,Material 材质节点的 emissiveColor 域自发光颜色将被用来画线。应用于 IndexedLineSet 节点光照方程的详细描述参见 17, 光组件 Lighting component
Normal : X3DNormalNode { MFVec3f [in,out] vector [] (-∞,∞) }
这个节点定义了一个用在某些几何节点(例如 IndexedFaceSet 和 ElevationGrid)的 vector 域中的三维表面法线向量集。这个节点包含一个由法线向量构成的多值域。法线应为单位长度。
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
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 指定在局部坐标系中并受祖先变换的影响。coord、normal、texCoord 域的在Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应按如下规则自动生成:如果 normalPerVertex 值为 TRUE,那么法线将为两个共享同一顶点的三角形的平均值。对应扇形的顶点,法线应为所有组成扇形的独立面法线的平均值。如果 normalPerVertex 值为 FALSE 那么法线将基于 ccw 域为当前三角形生成。
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 指定在局部坐标系中并受祖先变换的影响。coord、normal、texCoord 域的在Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应生成为面的垂线,而不需考虑 normalPerVertex 的情况。
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 指定在局部坐标系中并受祖先变换的影响。coord、normal、texCoord 域的在Coordinate、Normal、TextureCoordinate 节点中有相应描述。如果没有提供 normal 域,法线应按如下规则自动生成:如果 normalPerVertex 值为 TRUE,那么法线将为两个共享同一顶点的三角形的平均值。如果 normalPerVertex 值为 FALSE 那么法线将基于 ccw 域为当前三角形生成。
Rendering 组件提供 表 11.2 中规定的四个支持层(levels)。
层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 分量完全支持 |
翻译m17 保留版权 如需转载请联系 http://m17design.myetang.com/x3d