Partager via


texm3x3tex - ps

Effectue une multiplication de matrices 3x3 et utilise le résultat pour effectuer une recherche de texture. texm3x3tex doit être utilisé avec deux instructions texm3x3pad - ps .

Syntaxe

texm3x3tex dst, src

 

where

  • dst est le registre de destination.
  • src est un registre source.

Notes

Versions du nuanceur de pixels 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3tex x x x

 

Cette instruction est utilisée comme la dernière des trois instructions représentant une opération de multiplication de matrice 3x3, suivie d’une recherche de texture. La matrice 3x3 est composée des coordonnées de texture de la troisième étape de texture et des deux étapes de texture précédentes. Le vecteur à trois composants résultant (u,v,w) est utilisé pour échantillonner la texture à l’étape 3. Toute texture affectée aux deux étapes de texture précédentes est ignorée. La multiplication de matrices 3x3 est généralement utile pour orienter un vecteur normal vers l’espace tangent correct pour la surface en cours de rendu.

Cette instruction doit être utilisée avec l’instruction texm3x3pad. Les registres de texture doivent utiliser la séquence suivante.

 
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

Voici plus de détails sur la façon dont la multiplication 3x3 est effectuée.

La première instruction texm3x3pad exécute la première ligne de la multiplication pour rechercher u'.

u' = TextureCoordinates(étape m)UVW * t(n)RVB

La deuxième instruction texm3x3pad effectue la deuxième ligne de la multiplication pour rechercher v'.

v' = TextureCoordinates(étape m+1)UVW * t(n)RVB

L’instruction texm3x3spec effectue la troisième ligne de la multiplication pour rechercher w'.

w' = TextureCoordinates(étape m+2)UVW * t(n)RVB

Enfin, l’instruction texm3x3tex échantillonne t(m+2) avec (u',v',w') et stocke le résultat dans t(m+2).

t(m+2)RVBA = TextureSample(étape m+2)RVBA utilisant (u' , v' , w' ) comme coordonnées.

Exemples

Voici un exemple de nuanceur avec les mappages de texture identifiés et les étapes de texture identifiées.

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

Cet exemple nécessite la configuration de l’étape de texture suivante.

  • L’étape 0 se voit attribuer une carte de texture avec des données normales. Il s’agit souvent d’une carte de bosses. Les données sont des normales (XYZ) pour chaque texel. Le jeu de coordonnées de texture 0 définit comment échantillonner cette carte normale.
  • Le jeu de coordonnées de texture 1 est affecté à la ligne 1 de la matrice 3x3. Toute texture affectée à l’étape 1 est ignorée.
  • Le jeu de coordonnées de texture 2 est affecté à la ligne 2 de la matrice 3x3. Toute texture affectée à l’étape 2 est ignorée.
  • Le jeu de coordonnées de texture 3 est affecté à la ligne 3 de la matrice 3x3. Une texture de volume ou de cube doit être définie sur l’étape 3 pour la recherche par le vecteur 3D transformé.

Instructions du nuanceur de pixels