Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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