texm3x3tex – ps
Führt eine 3x3-Matrix multiplizieren aus und verwendet das Ergebnis, um eine Textursuche zu erstellen. texm3x3tex muss mit zwei texm3x3pad - ps-Anweisungen verwendet werden.
Syntax
texm3x3tex dst, src |
---|
where
- dst ist das Zielregister.
- src ist ein Quellregister.
Bemerkungen
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-Matrixmultiplikationsvorgang darstellen, gefolgt von einer Textursuche. Die 3x3-Matrix besteht aus den Texturkoordinaten der dritten Texturstufe und den beiden vorangehenden Texturstufen. Der resultierende Drei-Komponenten-Vektor (u,v,w) wird verwendet, um die Textur in Phase 3 zu erfassen. Jede Textur, die den beiden vorherigen Texturphasen zugewiesen ist, wird ignoriert. Die 3x3-Matrix multiplizieren 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 durch, 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 durch, um w' zu finden.
w' = TextureCoordinates(stage m+2)UVW * t(n)RGB
Schließlich wird in der texm3x3x3tex-Anweisung t(m+2) mit (u',v',w') 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 ein Beispielshader mit den identifizierten Texturzuordnungen und den identifizierten Texturphasen.
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 das folgende Setup der Texturphase erforderlich.
- Phase 0 wird eine Texturkarte mit normalen Daten zugewiesen. Dies wird häufig als Bump map bezeichnet. Die Daten sind (XYZ) normal für jeden Texel. Der Texturkoordinatensatz 0 definiert, wie diese normale Karte stichprobenweise verwendet werden soll.
- 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.
- Der Texturkoordinatensatz 3 wird Zeile 3 der 3x3-Matrix zugewiesen. Eine Volume- oder Würfeltextur sollte für die Suche durch den transformierten 3D-Vektor auf Stufe 3 festgelegt werden.
Zugehörige Themen