texbeml - ps

应用具有亮度修正的假凹凸环境映射转换。 这是通过使用地址扰动数据( (du、dv) 、2D 凹凸环境矩阵和亮度)修改目标寄存器的纹理地址数据来实现的。

语法

texbeml dst, src

 

其中

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

备注

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

 

src 寄存器中的红色和绿色数据被解释为 du,dv) (扰动数据。 src 寄存器中的蓝色数据被解释为亮度数据。

此指令使用 2D 凹凸环境映射矩阵转换源寄存器中的红色和绿色组件。 结果将添加到对应于目标寄存器号的纹理坐标集中。 使用亮度值和偏置纹理阶段值应用亮度校正。 结果用于对当前纹理阶段进行采样。

这可用于基于地址扰动的各种技术,例如假每像素环境映射。

此操作始终将 du 和 dv 解释为已签名的数量。 对于版本 1_0 和 1_1,不允许在输入参数上使用 源寄存器签名缩放 输入修饰符 (_bx2) 。

当输入纹理包含混合格式数据时,此指令将生成已定义的结果。 有关图面格式的详细信息,请参阅 D3DFORMAT

// When using this instruction, texture registers must follow 
//   the following sequence:
// The texture assigned to stage tn contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbeml t(m),  t(n)      where m > n

此示例演示指令中完成的计算。

// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
// 3. Luminance correction is applied

u' = TextureCoordinates (阶段 m) u +

D3DTSS_BUMPENVMAT00 (阶段 m) *t (n) R +

D3DTSS_BUMPENVMAT10 (阶段 m) *t (n) G

v' = TextureCoordinates (阶段 m) v +

D3DTSS_BUMPENVMAT01 (阶段 m) *t (n) R +

D3DTSS_BUMPENVMAT11 (阶段 m) *t (n) G

t (m) RGBA = TextureSample (阶段 m) 使用 (u',v') 作为坐标

t (m) RGBA = t (m) RGBA *

[ (t (n) B * D3DTSS_BUMPENVLSCALE (阶段 m) ) +

D3DTSS_BUMPENVLOFFSET (阶段 m) ]

已由 texbem 或 texbeml 指令读取的注册数据以后无法读取,其他 texbem 或 texbeml 除外。

// This example demonstrates the validation error caused by 
//   t0 being reread
ps_1_1
tex t0
texbem t1, t0
add r0, t1, t0

(Instruction Error) (Statement 4) Register data that has been read by 
texbem or texbeml instruction cannot be read by other instructions

示例

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

ps_1_1
tex t0              ; Define t0 to get a 2-tuple DuDv
texbeml t1, t0      ; Compute (u',v')
                    ; Apply luminance correction                    
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

此示例在以下纹理阶段中需要以下纹理。

  • 为阶段 0 分配了包含 (du、dv) 扰动数据的凹凸映射。
  • 为阶段 1 分配了一个包含颜色数据的纹理贴图。
  • texbeml 在采样的纹理阶段上设置矩阵数据。 这不同于固定函数管道的功能,其中扰动数据和矩阵占据同一纹理阶段。

像素着色器说明