texm3x3vspec - ps
執行 3x3 矩陣乘積,並使用結果來執行紋理查閱。 這可用於眼球光線向量不常的反射和環境對應。 texm3x3vspec 必須與兩個 texm3x3pad 搭配使用 - ps 指示。 如果眼睛光線向量是常數, texm3x3spec - ps 指令會執行相同的矩陣乘法和紋理查閱。
Syntax
texm3x3vspec dst, src |
---|
where
- dst 是目的地暫存器。
- src 是來源暫存器。
備註
圖元著色器版本 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x3vspec | x | x | x |
此指令會執行 3x3 矩陣乘法運算的最終資料列、將產生的向量解譯為一般向量以反映眼睛光線向量,然後使用反映向量做為紋理查閱的紋理位址。 它的運作方式就像 texm3x3spec - ps一樣,不同之處在于眼睛光線向量取自紋理座標的第四個元件。 3x3 矩陣乘法通常適用于將一般向量導向轉譯表面的正確正切空間。
3x3 矩陣是由第三個紋理階段和兩個先前紋理階段的紋理座標所組成。 產生的反射向量 (UVW) 可用來取樣階段 3 中的紋理。 系統會忽略指派給上述兩個紋理階段的任何紋理。
此指令必須與 texm3x3pad 指令搭配使用。 紋理暫存器必須使用下列序列。
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
texm3x3vspec t(m+2), t(n) // Perform third row of matrix multiply
// Then do a texture lookup on the texture
// associated with texture stage m+2
第一個 texm3x3pad 指令會執行乘法的第一個資料列來尋找 u'。
u' = TextureCoordinates (stage m) UVW * t (n) RGB
第二個 texm3x3pad 指令會執行乘以尋找 v'的第二個數據列。
v' = TextureCoordinates (階段 m+1) UVW * t (n) RGB
texm3x3spec 指令會執行乘以尋找 w'的第三個數據列。
w' = TextureCoordinates (stage m+2) UVW * t (n) RGB
texm3x3vspec 指令也會執行反映計算。
(u' , v' , w' ) = 2*[ (N*E) / (N*N) ]*N - E
其中一般 N 是由
N = (u' , v' , w' )
而眼睛光線向量 E 是由
E = (TextureCoordinates (stage m) Q ,
TextureCoordinates (階段 m+1) Q ,
TextureCoordinates (階段 m+2) Q )
最後,texm3x3vspec 指令範例 t (m+2) (搭配 u',v',w') ,並將結果儲存在 t (m+2) 。
t (m+2) RGBA = TextureSample (stage m+2) RGBA using (u' , v' , w' ) 作為座標
範例
以下是已識別紋理地圖和已識別紋理階段的範例著色器。
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
texm3x3vspec t3, t0 // Third row of matrix multiply to get a 3-vector
// Reflect 3-vector by the eye-ray vector
// Use reflected vector to do a texture lookup
// at stage 3
mov r0, t3 // Output the result
此範例需要下列紋理階段設定。
- 階段 0 會指派具有一般資料的紋理貼圖。 這通常稱為碰撞圖。 每個材質的資料 (XYZ) 標準。 階段 n 的紋理座標會定義如何取樣此一般地圖。
- 紋理座標集 m 會指派給 3x3 矩陣的第 1 列。 系統會忽略指派給階段 m 的任何紋理。
- 紋理座標集 m+1 會指派給 3x3 矩陣的第 2 列。 系統會忽略指派給階段 m+1 的任何紋理。
- 紋理座標集 m+2 會指派給 3x3 矩陣的第 3 列。 階段 m+2 會指派磁片區或 Cube 紋理貼圖。 紋理會提供 RGBA) (色彩資料。
- 眼睛光線向量 E 會傳入第四個元件中的指令, (q) 階段 m、m+1 和 m+2 的紋理座標資料。
相關主題