texm3x3tex - ps
Melakukan perkalian matriks 3x3 dan menggunakan hasilnya untuk melakukan pencarian tekstur. texm3x3tex harus digunakan dengan dua texm3x3pad - instruksi ps .
Sintaks
texm3x3tex dst, src |
---|
Di mana
- dst adalah register tujuan.
- src adalah register sumber.
Keterangan
Versi shader piksel | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x3tex | x | x | x |
Instruksi ini digunakan sebagai akhir dari tiga instruksi yang mewakili operasi perkalian 3x3 matriks, diikuti dengan pencarian tekstur. Matriks 3x3 terdiri dari koordinat tekstur tahap tekstur ketiga dan dua tahap tekstur sebelumnya. Vektor tiga komponen yang dihasilkan (u,v,w) digunakan untuk mengambil sampel tekstur di tahap 3. Tekstur apa pun yang ditetapkan ke dua tahap tekstur sebelumnya diabaikan. Perkalian matriks 3x3 biasanya berguna untuk mengorientasikan vektor normal ke ruang tangen yang benar untuk permukaan yang dirender.
Instruksi ini harus digunakan dengan instruksi texm3x3pad. Register tekstur harus menggunakan urutan berikut.
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
Berikut adalah detail selengkapnya tentang bagaimana perkalian 3x3 dicapai.
Instruksi texm3x3pad pertama melakukan baris pertama perkalian untuk menemukan u'.
u' = TextureCoordinates(stage m)UVW * t(n)RGB
Instruksi texm3x3pad kedua melakukan baris kedua dari perkalian untuk menemukan v'.
v' = TextureCoordinates(stage m+1)UVW * t(n)RGB
Instruksi texm3x3spec melakukan baris ketiga dari perkalian untuk menemukan w'.
w' = TextureCoordinates(stage m+2)UVW * t(n)RGB
Terakhir, sampel instruksi texm3x3tex t(m+2) dengan (u',v',w') dan menyimpan hasilnya dalam t(m+2).
t(m+2)RGBA = TextureSample(stage m+2)RGBA menggunakan (u' , v' , w' ) sebagai koordinat.
Contoh
Berikut adalah contoh shader dengan peta tekstur yang diidentifikasi dan tahap tekstur yang diidentifikasi.
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
Contoh ini memerlukan penyiapan tahap tekstur berikut.
- Tahap 0 diberi peta tekstur dengan data normal. Ini sering disebut sebagai peta benjolan. Datanya adalah (XYZ) normal untuk setiap texel. Kumpulan koordinat tekstur 0 menentukan cara mengambil sampel peta normal ini.
- Kumpulan koordinat tekstur 1 ditetapkan ke baris 1 dari matriks 3x3. Tekstur apa pun yang ditetapkan ke tahap 1 diabaikan.
- Kumpulan koordinat tekstur 2 ditetapkan ke baris 2 dari matriks 3x3. Tekstur apa pun yang ditetapkan ke tahap 2 diabaikan.
- Kumpulan koordinat tekstur 3 ditetapkan ke baris 3 dari matriks 3x3. Tekstur volume atau kubus harus diatur ke tahap 3 untuk pencarian oleh vektor 3D yang diubah.
Topik terkait