texm3x3tex - ps

执行 3x3 矩阵乘法,并使用结果进行纹理查找。 texm3x3tex 必须与两个 texm3x3pad 一起使用 - ps 指令。

语法

texm3x3tex dst, src

 

其中

  • dst 是目标寄存器。
  • src 是源寄存器。

备注

像素着色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3tex x x x

 

此指令用作表示 3x3 矩阵乘法运算的三个指令中的最后一个,后跟纹理查找。 3x3 矩阵由第三个纹理阶段和前两个纹理阶段的纹理坐标组成。 生成的三分量向量 (u,v,w) 用于对阶段 3 中的纹理采样。 将忽略分配给前两个纹理阶段的任何纹理。 3x3 矩阵乘法通常用于将法向量定向到要呈现的图面的正确正切空间。

此指令必须与 texm3x3pad 指令一起使用。 纹理寄存器必须使用以下序列。

 
tex t(n)                 // Define tn as a standard 3-vector (tn must
                         //   be defined in some way before it is used)
texm3x3pad t(m),   t(n)  //   where m > n
                         // Perform first row of matrix multiply
texm3x3pad t(m+1), t(n)  // Perform second row of matrix multiply
texm3x3tex t(m+2), t(n)  // Perform third row of matrix multiply to get a
                         //   3-vector with which to sample texture
                         //   associated with texture stage m+2

下面是有关如何实现 3x3 乘法的更多详细信息。

第一个 texm3x3pad 指令执行乘法的第一行来查找 u'

u' = TextureCoordinates (阶段 m) UVW * t (n) RGB

第二个 texm3x3pad 指令执行乘法的第二行以查找 v'

v' = TextureCoordinates (阶段 m+1) UVW * t (n) RGB

texm3x3spec 指令执行乘法的第三行以查找 w'

w' = TextureCoordinates (阶段 m+2) UVW * t (n) RGB

最后,texm3x3tex 指令使用 (u',v',w') 对 (m+2) 采样,并将结果存储在 t (m+2) 中。

t (m+2) RGBA = TextureSample (阶段 m+2) RGBA ,使用 (u' 、v' 、w' ) 作为坐标。

示例

下面是一个示例着色器,其中标识了纹理贴图和纹理阶段。

ps_1_1
tex t0                // Bind texture in stage 0 to register t0
texm3x3pad  t1,  t0   // First row of matrix multiply
texm3x3pad  t2,  t0   // Second row of matrix multiply
texm3x3tex  t3,  t0   // Third row of matrix multiply to get a
                      // 3-vector with which to sample texture at 
mov r0, t3            // stage 3 output result

此示例需要以下纹理阶段设置。

  • 为阶段 0 分配了一个包含普通数据的纹理贴图。 这通常称为凹凸图。 数据 (XYZ) 每个纹素的法线。 纹理坐标集 0 定义如何采样此法线贴图。
  • 纹理坐标集 1 分配给 3x3 矩阵的第 1 行。 将忽略分配给阶段 1 的任何纹理。
  • 纹理坐标集 2 分配给 3x3 矩阵的第 2 行。 将忽略分配给阶段 2 的任何纹理。
  • 纹理坐标集 3 分配给 3x3 矩阵的第 3 行。 应将卷或立方体纹理设置为第 3 阶段,以便通过转换的 3D 向量查找。

像素着色器说明