Compartilhar via


texbem - ps

Aplicar uma transformação de mapa de ambiente de colisão falsa. Isso é feito modificando os dados de endereço de textura do registro de destino, usando dados de perturbação de endereço (du,dv) e uma matriz de ambiente de colisão 2D.

Sintaxe

texbem 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
texbem x x x

 

Os dados de cor vermelho e verde no registro src são interpretados como os dados de perturbação (du,dv).

Esta instrução transforma componentes vermelhos e verdes 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 e é usado para amostrar o estágio de textura atual.

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 assinado. Os dados de formato misto só funcionarão se os dois primeiros canais contiverem dados assinados. Para obter mais informações sobre formatos de superfície, consulte D3DFORMAT.

Isso pode ser usado para uma variedade de técnicas baseadas na perturbação de endereço, incluindo mapeamento de ambiente falso por pixel e iluminação difusa (mapeamento de colisão).

Ao usar essa instrução, os registros de textura devem seguir a sequência a seguir.

// The texture assigned to stage t(n) contains the (du,dv) data
// The texture assigned to stage t(m) is sampled
tex     t(n)                    
texbem  t(m),  t(n)      where m > n

Os cálculos feitos na instrução são mostrados abaixo.

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

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

Os dados de registro que foram lidos por um texbem - ps ou texbeml - instrução ps não podem ser lidos mais tarde, exceto por outro texbem - ps ou texbeml - ps.

// 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
texbem t1, t0       ; Compute (u',v')
                    ; Sample t1 using (u',v')
mov r0, t1          ; Output result

texbem 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).
  • O Estágio 1 usa um mapa de textura com dados de cor.
  • Esta instrução 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.

Instruções de sombreador de pixel