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

18 Texturing component

纹理组件

--- X3D separator bar ---

cube 18.1 介绍

18.1.1 名称

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

18.1.2 概述

本条款描述了 ISO/IEC 19775 标准这部分中的 Texturing component (纹理组件)。其中包括如何在几何体上指定纹理以及如何调节纹理的位置。表 18.1 列出了这一条款的主要主题。

表 18.1 — 本条款的主题

 

cube 18.2 概念

18.2.1 纹理贴图格式

一些节点类型可以用来指定纹理贴图,其中包括:BackgroundImageTextureMovieTextureMultiTexturePixelTexture。一般,纹理贴图由一个包含描述色彩值的数组的 2D 图像定义。对照纹理贴图中分量的数量和图像格式,纹理贴图值将做不同的解释。一般,纹理贴图可以使用以下一种形式来描述

  1. 亮度纹理(单分量)
  2. 亮度加 alpha 透明度纹理(双分量)
  3. 全 RGB 纹理(三分量)
  4. 全 RGB 加 alpha 透明度纹理(四分量)

注意多数的图像格式指定 alpha 值为不透明度,而不是透明度(alpha = 1 - transparency)。

如何应用不同的纹理类型的描述见 17, Lighting component

虽然 ISO/IEC 19775 的此部分中只支持二维贴图格式,当以后的组件可能会支持三维或多维的纹理贴图格式。

18.2.2 纹理贴图图像格式

纹理节点必须支持 PNG (见 2.[I15948]),并按以下方式对 PNG 像素的格式做解释:

  1. 不附带 alpha 透明度的灰度像素被处理成亮度纹理。
  2. 附带 alpha 透明度的灰度像素被处理成亮度加 alpha 透明度纹理。
  3. 不附带 alpha 透明度的 RGB 像素被处理成全 RGB 纹理。
  4. 附带 alpha 透明度的 RGB 像素被处理成全 RGB 加 alpha 透明度纹理。

如果图像以索引色的方式指定(例如调色板(palettes 或 colourmaps)),将使用以下的语义。(注意 ‘灰度’ 将参照红绿蓝值相同的调色板):

  1. 如果调色板中所有的颜色都是灰度的并且没有透明块,将被处理成亮度纹理。
  2. 如果调色板中所有的颜色都是灰度并有透明块,将被处理成亮度加 alpha 透明度纹理。
  3. 如果调色板中有不是灰度的颜色并且没有透明块,将被处理全 RGB 纹理。
  4. 如果调色板中有不是灰度的颜色并有透明块,将被处理全 RGB 加 alpha 透明度纹理。

纹理节点必须支持 JPEG 文件(见 2.[JPEG]),并按以下方式对 JPEG 文件做解释:

  1. 灰度文件(色彩分量的数为 1)被处理成亮度纹理。
  2. YCbCr 文件被处理成全 RGB 纹理。
  3. 不必须支持其它的 JPEG 文件类型。建议其它的 JPEG 文件被处理成全 RGB 纹理。

纹理节点支持 MPEG 文件(见 2.[I11172-1])时,MPEG 文件应被处理成全 RGB 纹理。

纹理节点建议支持 GIF 文件(见 [GIF]),这时应用以上 PNG 格式的相关语义。

18.2.3 纹理坐标

纹理贴图被定义在一个 2D 坐标系 (s, t) 中,其中贴图两个方向上的定义都在范围 [0.0, 1.0] 中。图像的底边对应纹理贴图的 S 轴,图像的左边沿对应纹理贴图的 T 轴。图像左下角的像素对应 s=0, t=0 坐标,图像的右上角对应 s=1, t=1 坐标。纹理贴图可以被看作一个二维 colour 函数,给定一个 (s, t) 坐标,将返回函数 colour(s, t) 的颜色值。附图 18.1 描述了说明了1这种关系。

Texture map coord system

附图 18.1 — 纹理贴图坐标系

纹理贴图节点 ImageTextureMovieTexturePixelTexture 包含 repeatSrepeatT 这两个域,用以指定纹理在 S 方向和 T 方向上的包裹方式。如果 repeatS 值为 TRUE(缺省值),S 方向上纹理坐标范围 [0.0, 1.0] 之外的范围将重复进行纹理贴图。如果 repeatS 值为 FALSE,S 方向上的纹理坐标将被限制在 [0.0, 1.0]  范围中。repeatT 域和 repeatS 域类似。

每个基于顶点的几何节点(例如 IndexedFaceSet 和 ElevationGrid)使用一系列 2D 纹理坐标把纹理贴在顶点上。几何节点的纹理坐标通过使用 TextureCoordinate 节点和 TextureCoordinateGenerator 节点指定。S 轴或 T 轴纹理贴图值(ImageTextureMovieTexturePixelTexture)范围在 [0.0, 1.0] 间。然而,纹理坐标的范围可能在 (-∞,∞)。纹理坐标指定了某一个纹理贴图中的位置(然后将使用贴图中这个位置的色彩值)。先指定水平坐标 s,然后指定垂直坐标 t

如果纹理贴图在某个给定方向上(S 轴或 T 轴上)重复,设定纹理贴图在给定方向有 N 个像素,这个纹理坐标 C(s 或 t)将被按以下方式影射到纹理贴图上:

    Texture map location = (C - floor(C)) × N

如果纹理贴图不重复,纹理坐标将被按以下方式限制在 0.0 到 1.0 范围中:

    Texture map location = N,     if C > 1.0,
                         = 0.0,   if C < 0.0,
                         = C × N, if 0.0 ≤ C ≤ 1.0.

通过在 Appearance 节点包含的纹理构成中应用 TextureTransform 节点,纹理坐标可以被变换(缩放、旋转、平移)。

纹理贴图节点类型中关于重复纹理的描述祥见 ImageTextureMovieTexturePixelTexture

18.2.4 多纹理

可以在一个几何节点上按照预定的混合方法使用多纹理Multitexturing。这就允许使用包括光影贴图light mapping和(environment mapping)环境反射贴图等各种视觉效果。根据可用的硬件,可能运用 multi-stage (进程)或 multi-pass(多通道)技术实现多纹理。根据可用的硬件,可混合的纹理数可能对性能有很大影响

附图 18.2 描述了一个光影贴图的例子,在纹理1上添加了纹理2,模拟了一个预先处理过的物体的贴图。

基本纹理  Base Texture + 光影贴图  Plus Lightmap = 结果 equals Result

 (Base Texture + Lightmap = Result )

图 18.2 — 光影贴图的例子

多纹理使用 MultiTexture(多纹理节点和 MultiTextureCoordinate (多纹理坐标)节点来实现。MultiTexture 指定了一组单一的纹理 和纹理变换。MultiTextureCoordinate 指定了一组相关纹理使用的对应的纹理坐标。

表 18.2 比较在Appearance 节点和几何节点中使用单纹理和多纹理特性。

表 18.2: 单一纹理和多纹理属性

 

纹理节点
Texture Node appearance.texture
纹理变换
Texture Transform
纹理坐标
Texture coordinate geometry.texCoord
纹理模式Texture mode
ImageTexture { ...}

appearance.textureTransform
TextureTransform {}

TextureCoordinate { coord [ ] } 隐含地和关照模型的计算结果混合:
REPLACE / MODULATE
MultiTexture {
texture [
ImageTexture { ...}
ImageTexture { ...}
]}

MultiTexture {
textureTransform [
TextureTransform { ...}
TextureTransform { ...}
]}

MultiTextureCoordinate {
coord [
TextureCoordinate { coord [ ] }TextureCoordinate { coord [ ] }
]}

MultiTexture {
mode [
"MODULATE"
"MODULATE"
]}

18.3 抽象类型

18.3.1 X3DTextureCoordinateNode

X3DTextureCoordinateNode : X3DGeometricPropertyNode { 
}

这个抽象类型是所有用来指定纹理坐标的节点所使用的基本类型。这个类型要添加到 11, Rendering component 定义的几何体性质节点中。

18.3.2 X3DTextureNode

X3DTextureNode : X3DAppearanceChildNode { 
}

这个抽象类型是所有用来指定纹理图像源的节点所使用的基本类型。

18.3.3 X3DTexture2DNode

X3DTexture2DNode : X3DTextureNode {
  SFBool  []       repeatS TRUE
  SFBool  []       repeatT TRUE
}

这个抽象类型是所有用来指定纹理图像的 2D 源的节点所使用的基本类型。

18.3.4 X3DTextureTransformNode

X3DTextureTransformNode : X3DAppearanceChildNode { 
}

这个抽象类型是所有用来指定纹理坐标变换的节点所使用的基本类型。

18.3.5 X3DTextureTransform2DNode

X3DTextureTransform2DNode : X3DTextureTransformNode { 
  SFVec2f [in,out] center      0 0 (-∞,∞)
  SFFloat [in,out] rotation    0   (-∞,∞)
  SFVec2f [in,out] scale       1 1 (-∞,∞)
  SFVec2f [in,out] translation 0 0 (-∞,∞)
}

这个抽象类型是所有用来指定纹理坐标 2D 变换的节点所使用的基本类型。

18.4 节点参考

18.4.1 ImageTexture (图像纹理)

ImageTexture : X3DTexture2DNode { 
  MFString [in,out] url     []   [urn]
  SFBool   []       repeatS TRUE 
  SFBool   []       repeatT TRUE 
}

通过指定一个图像文件和指定几何体上贴图的一般参数,Texture 节点定义了一个纹理贴图。

纹理由 url 域中指定的 URL 中存取。当 url 域中不包含值时([]),纹理将被禁止。浏览器应支持 JPEG(见 2. [JPEG])和 PNG(见 2.[I15948])图像文件格式。另外,浏览器也可以支持能渲染到 2D 图像的其它图像格式(例如 CGM,2. [I8632])。推荐支持 GIF 格式(见 [GIF],包括透明度支持)。url 域的描述相见 9.2.1 URLs

一般的关于纹理贴图的描述见 18.2, 概念

光照方程的描述,以及纹理、材质和几何体的外观如何结合见 17, Lighting component

18.4.2 MovieTexture (电影纹理)

MovieTexture : X3DTexture2DNode, X3DSoundSourceNode{ 
  SFBool   [in,out] loop             FALSE
  SFFloat  [in,out] speed            1.0   (-∞,∞)
  SFTime   [in,out] startTime        0     (-∞,∞)
  SFTime   [in,out] stopTime         0     (-∞,∞)
  MFString [in,out] url              []    [urn]
  SFBool   []       repeatS          TRUE
  SFBool   []       repeatT          TRUE
  SFTime   [out]    duration_changed
  SFBool   [out]    isActive
}

MovieTexture 定义了一个时间相关的纹理贴图(包含在一个影片文件中)以及控制影片和纹理贴图的参数。MovieTexture 节点也可以被用作Sound 节点的声音数据源。在这种特殊情况下,MovieTexture 节点不会被渲染。

定义影片数据的 url 域应支持 2.[I11172-1] 中定义的 MPEG1-Systems(音频和视频)或 MPEG1-Video(只有视频)影片文件格式。url 域的描述相见 9.2.1 URLs

MovieTexture 节点可以由 Appearance 节点的 texture 域引用(作为影片纹理),或由 Sound 节点的 source 域引用(作为一个音频源)。

一旦影片被载入,就发出一个 duration_changed 域事件。这表示以秒为单位的影片持续时间。这个域可以被读取(例如由 Script node 节点读取)而测定影片持续时间。"-1" 的值表示影片还没有被载入或因为某些原因此值不可用。

loop 域、startTime 域、stopTime 域、isActive 域和它们在 MovieTexture 节点上的效果描述,详见 8, Time component。MovieTexture 节点的循环周期是以 speed 域指定的速度播放影片一次的秒数。

speed 域指示影片的播放速度。speed 值为 2 表示影片以两倍速度播放。duration_changed 输出事件不受 speed 域影响。set_speed 事件在影片播放时将被忽略。负值的 speed 表示影片将被倒放。

如果影片载入时 MovieTexture 节点没激活,且 speed 域为非负值时,显示影片纹理的 0 帧,或 speed 域为负值时,显示影片纹理的最后一帧。(见 8.2.4, Time-dependent nodes)。 如果 speed = 0,MovieTexture 节点将显示 0 帧。当 speed 域为正值时,激活的 MovieTexture 节点显示按以下规则显示位于影片时间 t 的帧(假设影片的局部事件系中帧 0 位于时间 0 且 speed = 1):

    t = (now - startTime) modulo (duration/speed)

speed 域为负值时, MovieTexture 节点显示按以下规则显示位于影片时间的帧:

 - ((now - startTime) modulo |duration/speed|)

如果 MovieTexture 节点变为不活动,对应 MovieTexture 节点不活动时间的帧将保留以作纹理。

一般的关于纹理贴图的描述见 18.2, 概念

光照方程的描述,以及纹理、材质和几何体的外观如何结合见 17, Lighting component

18.4.3 MultiTexture (多纹理)

MultiTexture : X3DTextureNode {
  SFFloat  [in,out] alpha            1     [0,1]
  SFColor  [in,out] color            1 1 1 [0,1] 
  MFString [in,out] function         []
  MFString [in,out] mode             []
  MFString [in,out] source           []
  MFNode   [in,out] texture          []    [X3DTextureNode]
  SFBool   [in,out] transparent      FALSE
}

主要功能

MultiTexture 允许在一个3D对象上使用多个单一纹理,以完成复杂的视觉效果。在 Appearance(外观)节点的 texture 域中可以使用 MultiTexture 作为其域值。

texture 包括了一个 Texture 节点 的列表比如 ImageTexture,PixelTexture,MovieTexture,CompositeTexture3D) 。

materialColormaterialAlpha 域允许忽略 X3D 光照组件章节 (17, Lighting component) 中定义的光照方程。

color 域和 alpha 域为基于 SELECT 运算模式定义了 RGB 和 alpha 的值。

如果 materialColor 域为 TRUE, 纹理就和存在的RGB(材质扩散色或对象的顶点颜色)混合。

mode 域控制了混合运算的类型。可用的模式包括被照亮的 Appearance 所用的 MODULATE,未被照亮的 Appearance 所用的 REPLACE ,以及其它这两种模式的变种。

表 18.3 列出了可能的多纹理模式。

表 18.3 — 可能的多纹理模式

MODE 模式 描述
MODULATE 包括当前颜色的多个纹理颜色
Arg1 × Arg2
REPLACE 替换当前的颜色
Arg2
MODULATE2X 自变量的每个分量相乘,并把乘积左移 1 比特位(相当于乘以 2)以加亮。
MODULATE4X 自变量的每个分量相乘,并把乘积左移 1 比特位(相当于乘以 4)以加亮。
ADD 将自变量的分量相加
Arg1 + Arg2
ADDSIGNED 自每个自变量的分量上先作 -0.5 的偏移,然后再将其相加,这样使其和的有效范围在 -0.5 到 0.5 之间。
ADDSIGNED2X 自每个自变量的分量上先作 -0.5 的偏移,然后再将其相加,最后并把和左移 1 比特位
SUBTRACT 从第一个自变量的分量中减去第二个自变量的分量。
Arg1 - Arg2
ADDSMOOTH 把第一个自变量和第二个自变量向加,在从两个自变量的和中减去这两个自变量的乘积。
Arg1 + Arg2 - Arg1 × Arg2 = Arg1 + (1-Arg1) × Arg2
BLENDDIFFUSEALPHA 线性地 alpha 混合此纹理进程,alpha 值从每个顶点插值得来。
Arg1 × (Alpha) + Arg2 × (1-Alpha)
BLENDTEXTUREALPHA 线性地 alpha 混合此纹理进程,alpha 值从此进程的纹理得来。
Arg1 × (Alpha) + Arg2 × (1-Alpha)
BLENDFACTORALPHA 线性地 alpha 混合此纹理进程,alpha 值从 MultiTexture 节点中alpha 域得来。
Arg1 × (Alpha) + Arg2 × (1-Alpha)
BLENDCURRENTALPHA 线性地 alpha 混合此纹理进程,alpha 值从前一纹理进程得来。
Arg1 × (Alpha) + Arg2 × (1-Alpha)
MODULATEALPHA_ADDCOLOR 使用第一个自变量的 alpha 值调节第二个自变量的颜色;然后把结果加在第一个自变量上。
Arg1.RGB + Arg1.A × Arg2.RGB
MODULATEINVALPHA_ADDCOLOR 和 MODULATEALPHA_ADDCOLOR, 相似,但使用第一个自变量的 alpha 的相反值。
(1-Arg1.A) × Arg2.RGB + Arg1.RGB

MODULATEINVCOLOR_ADDALPHA

和 MODULATECOLOR_ADDALPHA, 相似,但使用第一个自变量的相反颜色值。
(1-Arg1.RGB) × Arg2.RGB + Arg1.A
OFF 关闭纹理单位
SELECTARG1 使用颜色自变量 1
Arg1
SELECTARG2 使用颜色自变量 2
Arg2 
DOTPRODUCT3 调节每个自变量的分量(作为带正负符号的分量),然后把其结果相加,再复制这个和到包括 alpha 的所有四个通道。
这可以正确输入以制作出扩散凹凸或高光凹凸的贴图。将执行函数 function (Arg1.R × Arg2.R + Arg1.G × Arg2.G + Arg1.B × Arg2.B) 其中每个分量已经经过缩放和偏移以使其带正负符号。并把结果应用到所有四个(包括 alpha)通道。

source 域决定了第二个自变量的色彩源。 表 18.4 列出了 source 域可用的值。

可以在 mode 前加操作符做前缀。表 18.4 列出了复合的多纹理模式。

表 18.4 — source 域可用的值

MODE 模式 描述
"" (缺省) 第二个自变量的颜色(ARG2)来自前一个渲染进程(DIFFUSE 是第一个进程)。
"DIFFUSE" 纹理自变量来自 Gouraud 明暗处理后顶点的扩散颜色分量的插值。
"SPECULAR" 纹理自变量来自 Gouraud 明暗处理后顶点的高光颜色分量的插值。
"FACTOR" 纹理自变量来自 MultiTexture 节点中的要素(color、alpha)。

function 域定义了可以在 mode 模式运算后应用到自变量的可选的功能。表 18.5 列出了 function 域使用的值。

表 18.5 — function 域可用的值

Operator 操作符 描述
"" (缺省) 不使用此功能。
"COMPLEMENT" 如果自变量的结果涉及到变量 x 时,反转自变量,也就是说值将为 1.0 减去 x。
"ALPHAREPLICATE" 操作完成前复制 alpha 信息到所有的色彩通道。

模式中可以包含 alpha 通道所另外使用的混合模式;例如 "MODULATE,REPLACE" 将制定 Color = (Arg1.color × Arg2.color, Arg1.alpha)。

使用的纹理进程的数量将由纹理域的长度指定。如果缺少 mode 模式值,将使用缺省的模式 "MODULATE"。

18.4.4 MultiTextureCoordinate (多纹理坐标)

MultiTextureCoordinate : X3DTextureCoordinateNode {
  MFNode [in,out] texCoord NULL [X3DTextureCoordinateNode]
}

MultiTextureCoordinate 在每个顶点上应用多个纹理坐标。这个节点可以为不同的贴图通道指定各自的纹理坐标。

texCoord 域中的每一项可以包含一个 TextureCoordinate 节点或 TextureCoordinateGenerator 节点。

如果使用在 IndexedFaceSet 节点中使用 MultiTexture 而不使用 MultiTextureCoordinate texCoord,缺省情况下通道 0 所使用的纹理坐标将被复制到其它通道。同样,如果 texCoord 域中缺少项,最后一项将被复制到其它通道。

范例:

Shape { 
  appearance Appearance { 
    texture MultiTexture {  
      mode [ "MODULATE" "MODULATE" ] 
      texture [ 
        ImageTexture { url "brick.jpg")  
        ImageTexture { repeatS FALSE repeatT FALSE url "light_gray.png"} 
      ]
    }
  }
  geometry IndexedFaceSet {  
      ... 
    texCoord MultiTextureCoord {
      texCoord [ 
        TextureCoordinate { ... } 
        TextureCoordinate { ... } 
      ] 
    }
  }
}

18.4.5 MultiTextureTransform (多纹理变换)

MultiTextureTransform : X3DTextureTransformNode { 
  MFNode [in,out] textureTransform   NULL [X3DTextureTransformNode]
}

MultiTextureTransform 为每个外观提供多个纹理变换。这个节点可以为不同的贴图通道指定各自的纹理变换。MultiTextureTransform 可以出现在场景图中任何 X3DTextureTransformNode 可以出现的地方。

textureTransform 域中的每一项可以包括一个 X3DTextureTransformNode 或为 NULL(空)。

如果使用在 IndexedFaceSet 节点中使用 MultiTexture 而不使用 MultiTextureTransform 节点,缺省情况下通道 0 所使用的纹理坐标将被复制到其它通道。同样,如果  textureTransform 域中缺少项,最后一项将被复制到其它通道。

范例:

Shape { 
  appearance Appearance { 
    texture MultiTexture {  
      mode [ "MODULATE" "MODULATE" ] 
      texture [ 
        ImageTexture { url "brick.jpg")  
        ImageTexture { repeatS FALSE repeatT FALSE url "light_gray.png"} 
      ]
    }

    textureTransform MultiTextureTransform {
	    textureTransform [  
		  TextureTransform {}  
		  TextureTransform { scale 0.5 0.5 } 
        ]
    } 
  }
}

18.4.6 PixelTexture (像素纹理)

PixelTexture : X3DTexture2DNode { 
  SFImage [in,out] image   0 0 0
  SFBool  []       repeatS TRUE
  SFBool  []       repeatT TRUE
}

PixelTexture 节点定义了一个基于 2D 图像的纹理贴图,方法是直接给出一个像素值数组(image 域),并给出纹理如何重复平铺到几何对象上控制参数。

一般的关于纹理贴图的描述见 18.2, 概念

光照方程的描述,以及纹理、材质和几何体的外观如何结合见 17, Lighting component。image 图像域值的规格见 5.7 SFImage and MFImage

18.4.7 TextureCoordinate (纹理坐标)

TextureCoordinate : X3DTextureCoordinateNode { 
  MFVec2f [in,out] point [] (-∞,∞)
}

TextureCoordinate 节点是一个几何体性质节点,用来指定一系列 2D 纹理坐标,以指定在基于顶点的几何节点(例如 IndexedFaceSet 和 ElevationGrid)中如何把纹理贴的顶点上。

18.4.8 TextureCoordinateGenerator (纹理坐标生成器节点)

TextureCoordinateGenerator : X3DTextureCoordinateNode {
  SFString [in,out] mode      "SPHERE" [see Table 参见列表]
  MFFloat  [in,out] parameter []       [see Table 参见列表]
}

TextureCoordinateGenerator (纹理坐标生成器)支持对指定几何形体自动生成纹理坐标。

这个节点可以用在相关节点的 texCoord 域中,以设置纹理坐标。

mode 域按照 表 18.6 中描述的生成纹理坐标的运算法则来定义如何生成纹理坐标。

表 18.6 —  纹理坐标生成模式

模式 描述
SPHERE 用来建立球型环境反射贴图或“铬合金”反射贴图的纹理坐标,此坐标的建立是基于变换到摄像机空间的顶点法线的。00
u = Nx/2 + 0.5
v = Ny/2 + 0.5
这里 u 和 v 代表要计算的纹理坐标,Nx 和 Ny 代表摄像机空间中顶点法线的 x 分量和 y 分量。如果法线有一个正 x 分量,法线指向右,则用 u 坐标对纹理寻址调节。同样对于 v 坐标:正 y 表示法线向上。每个分量的负值则表示相反的情况。如果法线直接指向摄像机,结果的坐标将没有扭曲。在两个坐标上都将加上 +0.5 的偏移,以使零扭曲的点位于球形贴图的中心,同时顶点法线 (0, 0, z) 将寻址到此点。注意此方程不计算法线的 z 分量。
CAMERASPACENORMAL 使用转换到摄像机空间的顶点法线作为输入纹理坐标,结果的坐标将在 -1 到 1 范围中。
CAMERASPACEPOSITION 使用转换到摄像机空间的顶点位置作为输入纹理坐标。
CAMERASPACEREFLECTIONVECTOR 使用转换到摄像机空间的反射向量作为输入纹理坐标。反射向量由输入顶点位置和法线向量计算。
R=2 × DotProd(E,N) × N -E;
在以上方程中,R 表示将要计算的反射向量,E 表示位置到眼睛的法线,N 表示摄像机空间的顶点法线。
结果的坐标将在 -1 到 1 范围中。
SPHERE-LOCAL 在局部坐标中的 SPHERE 球形帖图坐标。
COORD 使用顶点坐标。
COORD-EYE 使用转换到摄像机空间的顶点坐标。
NOISE 在顶点坐标上使用 Perlin solid 噪音函数计算而来,参数包括比例和平移 [scale.x scale.y scale.z translation.x translation.y translation.z]。
NOISE-EYE 和 NOISE 模式相近同,但先把顶点坐标转换到摄像机空间。
SPHERE-REFLECT 和 "CAMERASPACEREFLECTIONVECTOR" 相似,但附带一个可选的折射率(见 NVIDIA 白皮书),参数 [0] 将包含折射率。
结果的坐标将在 -1 到 1 范围中。
SPHERE-REFLECT-LOCAL 和 "SPHERE-REFLECT" 相似,参数 [0] 包含折射率,参数 [1 to 3] 包含局部坐标中的视点位置。通过动画参数 [1 to 3],反射将根据视点做改变。
结果的坐标将在 -1 到 1 范围中。

某些模式可能是硬件加速的。还有些时基于视点计算的。

18.4.9 TextureTransform (纹理变换)

TextureTransform : X3DTextureTransform2DNode { 
  SFVec2f [in,out] center      0 0 (-∞,∞)
  SFFloat [in,out] rotation    0   (-∞,∞)
  SFVec2f [in,out] scale       1 1 (-∞,∞)
  SFVec2f [in,out] translation 0 0 (-∞,∞)
}

TextureTransform 节点定义了一个应用到纹理坐标(见 TextureCoordinate)上的 2D 变换。这个节点将影响纹理坐标应用到几何体表面的方式。平移包括(依次):

  1. 平移;
  2. 沿任一点和任一轴的旋转;
  3. 沿任一点的非均匀缩放(也可能均匀缩放)。

这些参数将支持改变几何形上纹理的位置、方向、尺寸。从几何体表面的方向上考虑,这些操作的效果都是相反的。例如,一个放大纹理坐标的 scale 值 (2 2) ,实际效果将是使纹理的尺寸收缩了 2 倍(纹理坐标为两倍大导致纹理贴图重复两次)。一个沿 S 轴平移纹理坐标 +.5 单位的 translation 值 (0.5 0.0)实际效果将是使纹理沿几何体上 S 轴平移纹理坐标 -.5 单位。旋转纹理坐标 π/2 将导致几何体上的纹理旋转 -π/2。

center 域指定了纹理坐标空间中的位置偏移,rotation 域和 scale 域的缩放和旋转也沿此位移过的坐标系原点。scale 域指定了沿 center 点的纹理坐标系的 S 轴和 T 轴的缩放因子。scale 值范围在 (-∞,∞)。rotation 域以弧度值指定一个沿 center 点的纹理坐标系旋转,纹理旋转应应用在纹理缩放之后。正的旋转值使纹理坐标沿 center 点逆时针旋转,这样看起来纹理将自己做顺时针旋转。translation 域将指定一个纹理坐标的平移。

下面的变换矩阵中,Tc 表示变换前的纹理坐标,Tc' 表示变换后的纹理坐标,C (center)、T (translation)、R (rotation)、S (scale) 分别为相应的等价变换矩阵,

    Tc' = -C × S × R × C × T × Tc

注意变换顺序和 Transform 节点中的变换顺序是相反的,因为变换的是纹理坐标(例如纹理坐标系),而不是纹理。

cube 18.5 支持级别

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

表 18.7 — Texturing 组件支持级别

级别Level 必备条件 节点 支持
1 Core 1; Grouping 1; Geometric properties 1; Appearance 1
X3DTextureCoordinateNode(抽象) n/a
X3DTextureNode(抽象) n/a
X3DTexture2DNode(抽象) n/a
ImageTexture 所有域
TextureCoordinate 所有域
2 Core 1; Grouping 1; Geometric properties 1; Appearance 1  
  Level 1 的所有 Texturing 节点 Level 1 中支持的所有域
X3DTextureTransformNode (abstract) n/a
X3DTextureTransform2DNode (abstract) n/a
MovieTexture 所有域
PixelTexture 所有域
3 Core 1; Grouping 1; Geometric properties 1; Appearance 1  
Level 2 的所有 Texturing 节点 Level 2 中支持的所有域
MultiTexture 所有域
MultiTextureCoordinate 所有域
TextureCoordinateGenerator 所有域

--- X3D separator bar ---

Site Meter