texm3x3tex – ps

Führt eine Multiplikation der 3x3-Matrix aus und verwendet das Ergebnis, um eine Textursuche zu erstellen. texm3x3tex muss mit zwei Texm3x3pad - ps-Anweisungen verwendet werden.

Syntax

texm3x3tex dst, src

Hierbei gilt:

  • dst ist das Zielregister.
  • src ist ein Quellregister.

Hinweise

Pixelshaderversionen 1_1 1_2 1 _ 3 1_4 2 _ 0 2 _ x 2 _ sw 3 _ 0 3 _ sw
texm3x3tex x x x

Diese Anweisung wird als letzte von drei Anweisungen verwendet, die einen 3x3-Matrix-Multiplikationsvorgang darstellen, gefolgt von einer Textursuche. Die 3x3-Matrix besteht aus den Texturkoordinaten der dritten Texturphase und den beiden vorhergehenden Texturstufen. Der resultierende Dreikomponentenvektor (u,v,w) wird verwendet, um die Textur in Phase 3 zu beproben. Jede Textur, die den beiden vorherigen Texturstufen zugewiesen ist, wird ignoriert. Die Multiplikation der 3x3-Matrix ist in der Regel nützlich, um einen normalen Vektor auf den richtigen Tangensraum für die gerenderte Oberfläche auszurichten.

Diese Anweisung muss mit der Texm3x3pad-Anweisung verwendet werden. Texturregister müssen die folgende Sequenz verwenden.

 
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

Hier finden Sie weitere Details dazu, wie die 3x3-Multiplikation erreicht wird.

Die erste texm3x3pad-Anweisung führt die erste Zeile der Multiplikation aus, um u'zu finden.

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

Die zweite texm3x3pad-Anweisung führt die zweite Zeile der Multiplikation aus, um v'zu finden.

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

Die texm3x3spec-Anweisung führt die dritte Zeile der Multiplikation aus, um w'zu finden.

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

Schließlich werden in der texm3x3tex-Anweisung t(m+2) mit (u', v', w') entnommen und das Ergebnis in t(m+2) gespeichert.

t(m+2)RGBA = TextureSample(stage m+2)RGBA using (u' , v' , w' ) als Koordinaten.

Beispiele

Hier sehen Sie einen Beispiel-Shader mit den identifizierten Texturzuordnungen und den identifizierten Texturstufen.

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

Für dieses Beispiel ist die folgende Texturphaseneinrichtung erforderlich.

  • Phase 0 wird eine Texturkarte mit normalen Daten zugewiesen. Dies wird häufig als "Bump Map" bezeichnet. Die Daten sind (XYZ)-Normalitäten für jedes Texel. Texturkoordinatensatz 0 definiert die Stichprobenentnahme für diese normale Karte.
  • Texturkoordinatensatz 1 wird Zeile 1 der 3x3-Matrix zugewiesen. Jede Textur, die Phase 1 zugewiesen ist, wird ignoriert.
  • Texturkoordinatensatz 2 wird Zeile 2 der 3x3-Matrix zugewiesen. Jede Textur, die Phase 2 zugewiesen ist, wird ignoriert.
  • Texturkoordinatensatz 3 wird Zeile 3 der 3x3-Matrix zugewiesen. Ein Volume oder eine Cubetextur sollte für die Suche durch den transformierten 3D-Vektor auf Stufe 3 festgelegt werden.

Pixelshaderanweisungen