texm3x2tex - ps
执行 3x2 矩阵乘法的最后一行,并使用结果进行纹理查找。 texm3x2tex 必须与 texm3x2pad - ps 指令结合使用。
语法
texm3x2tex dst, src |
---|
其中
- dst 是目标寄存器。
- src 是源寄存器。
备注
像素着色器版本 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x2tex | x | x | x |
指令用作表示 3x2 矩阵乘法运算的两个指令之一。 此指令必须与 texm3x2pad - ps 指令一起使用。
使用这两条指令时,纹理寄存器必须使用以下序列。
tex t(n) // Define tn as a standard 3-vector (tn must
// be defined in some way before it is used)
texm3x2pad t(m), t(n) // where m > n
// Perform first row of matrix multiply
texm3x2tex t(m+1), t(n) // Perform second row of matrix multiply
// to get (u,v) to sample texture
// associated with stage m+1
下面是有关如何实现 3x2 乘法的更多详细信息。
texm3x2pad 指令执行乘法的第一行以查找 u'。
u' = t (n) RGB * TextureCoordinates (阶段 m) UVW
texm3x2tex 指令执行乘法的第二行以查找 v'。
v' = t (n) RGB * TextureCoordinates (阶段 m+1) UVW
texm3x2tex 指令使用 (u', v') 对舞台上 (m+1) 的纹理进行采样,并将结果存储在 t (m+1) 中。
t (m+1) RGB = TextureSample (阶段 m+1) RGB ,使用 (u', v' ) 作为坐标
示例
下面是一个示例着色器,其中标识了纹理贴图和纹理阶段。
ps_1_1
tex t0 // Bind texture in stage 0 to register t0
texm3x2pad t1, t0 // First row of matrix multiply
texm3x2tex t2, t0 // Second row of matrix multiply to get (u,v)
// with which to sample texture in stage 2
mov r0, t2 // Output result
此示例在以下纹理阶段中需要以下纹理。
- 阶段 0 采用包含 (x,y,z) 扰动数据的地图。
- 阶段 1 保存纹理坐标。 纹理阶段中不需要纹理。
- 阶段 2 同时保留纹理坐标以及在该纹理阶段设置的 2D 纹理。
相关主题