Compartilhar via


texm3x3tex - ps

Executa uma multiplicação de matriz 3x3 e usa o resultado para fazer uma pesquisa de textura. texm3x3tex deve ser usado com dois texm3x3pad – instruções ps .

Sintaxe

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

 

Esta instrução é usada como o final de três instruções que representam uma operação de multiplicação de matriz 3x3, seguida por uma pesquisa de textura. A matriz 3x3 é composta pelas coordenadas de textura do terceiro estágio de textura e dos dois estágios de textura anteriores. O vetor de três componentes resultante (u,v,w) é usado para amostrar a textura no estágio 3. Qualquer textura atribuída aos dois estágios de textura anteriores é ignorada. A multiplicação de matriz 3x3 normalmente é útil para orientar um vetor normal para o espaço tangente correto para a superfície que está sendo renderizada.

Esta instrução deve ser usada com a instrução texm3x3pad. Os registros de textura devem usar a sequência a seguir.

 
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

Veja mais detalhes sobre como a multiplicação 3x3 é realizada.

A primeira instrução texm3x3pad executa a primeira linha da multiplicação para localizar u'.

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

A segunda instrução texm3x3pad executa a segunda linha da multiplicação para localizar v'.

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

A instrução texm3x3spec executa a terceira linha da multiplicação para localizar w'.

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

Por fim, a instrução texm3x3tex amostra t(m+2) com (u',v',w') e armazena o resultado em t(m+2).

t(m+2)RGBA = TextureSample(stage m+2)RGBA usando (u' , v' , w' ) como coordenadas.

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                // 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

Este exemplo requer a configuração do estágio de textura a seguir.

  • A fase 0 recebe um mapa de textura com dados normais. Isso geralmente é chamado de mapa de colisão. Os dados são normais (XYZ) para cada texel. O conjunto de coordenadas de textura 0 define como amostrar esse mapa normal.
  • O conjunto de coordenadas de textura 1 é atribuído à linha 1 da matriz 3x3. Qualquer textura atribuída à fase 1 é ignorada.
  • O conjunto de coordenadas de textura 2 é atribuído à linha 2 da matriz 3x3. Qualquer textura atribuída à fase 2 é ignorada.
  • O conjunto de coordenadas de textura 3 é atribuído à linha 3 da matriz 3x3. Um volume ou textura de cubo deve ser definido como estágio 3 para pesquisa pelo vetor 3D transformado.

Instruções de sombreador de pixel