texbeml - ps
Aplique uma transformação de mapa de ambiente de colisão falsa com correção de luminância. Isso é feito modificando os dados de endereço de textura do registro de destino, usando dados de perturbação de endereço (du,dv), uma matriz de ambiente de colisão 2D e luminância.
Sintaxe
texbeml dst, src |
---|
onde
- dst é o registro de destino.
- src é um registro de origem.
Comentários
Versões do sombreador de pixel | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texbeml | x | x | x |
Os dados de cor vermelho e verde no registro src são interpretados como os dados de perturbação (du,dv). Os dados de cor azul no registro src são interpretados como os dados de luminância.
Esta instrução transforma os componentes vermelho e verde no registro de origem usando a matriz de mapeamento de ambiente de colisão 2D. O resultado é adicionado ao conjunto de coordenadas de textura correspondente ao número de registro de destino. Uma correção de luminância é aplicada usando o valor de luminância e os valores de estágio de textura de desvio. O resultado é usado para amostrar o estágio de textura atual.
Isso pode ser usado para uma variedade de técnicas com base na perturbação de endereço, como mapeamento de ambiente falso por pixel.
Essa operação sempre interpreta du e dv como quantidades assinadas. Para as versões 1_0 e 1_1, o modificador de entrada de dimensionamento com sinal de registro de origem (_bx2) não é permitido no argumento de entrada.
Esta instrução produz resultados definidos quando texturas de entrada contêm dados de formato misto. Para obter mais informações sobre formatos de superfície, consulte 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
Este exemplo mostra os cálculos feitos dentro da instrução .
// 1. New values for texture addresses (u',v') are calculated
// 2. Sample the texture using (u',v')
// 3. Luminance correction is applied
u' = TextureCoordinates(stage m)u +
D3DTSS_BUMPENVMAT00(stage m)*t(n)R +
D3DTSS_BUMPENVMAT10(stage m)*t(n)G
v' = TextureCoordinates(stage m)v +
D3DTSS_BUMPENVMAT01(stage m)*t(n)R +
D3DTSS_BUMPENVMAT11(stage m)*t(n)G
t(m)RGBA = TextureSample(stage m) usando (u',v') como coordenadas
t(m)RGBA = t(m)RGBA *
[(t(n)B * D3DTSS_BUMPENVLSCALE(stage m)) +
D3DTSS_BUMPENVLOFFSET(estágio m)]
Os dados de registro que foram lidos por uma instrução texbem ou texbeml não podem ser lidos mais tarde, exceto por outro texbem ou 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
Exemplos
Aqui está um sombreador de exemplo com os mapas de textura identificados e os estágios de textura identificados.
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
Este exemplo requer as texturas a seguir nos estágios de textura a seguir.
- O estágio 0 recebe um mapa de colisão com dados de perturbação (du, dv).
- A fase 1 recebe um mapa de textura com dados de cor.
- texbeml define os dados de matriz no estágio de textura amostrado. Isso é diferente da funcionalidade do pipeline de função fixa em que os dados de perturbação e as matrizes ocupam o mesmo estágio de textura.
Tópicos relacionados