texm3x3spec - ps
執行 3x3 矩陣相乘,並使用結果來執行紋理查閱。 這可用於反射和環境對應。 texm3x3spec 必須與兩個 texm3x3pad - ps 指示搭配使用。
Syntax
texm3x3spec dst, src0, src1 |
---|
where
- dst 是目的地暫存器。
- src0 和 src1 是來源暫存器。
備註
圖元著色器版本 | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
texm3x3spec | x | x | x |
此指令會執行 3x3 矩陣乘法的最後一個資料列、使用產生的向量做為一般向量來反映眼睛光線向量,然後使用反映的向量來執行紋理查閱。 著色器會從常數暫存器讀取眼光向量。 3x3 矩陣乘法通常適用于將一般向量導向轉譯表面的正確正切空間。
3x3 矩陣是由第三個紋理階段的紋理座標和前兩個紋理階段所組成。 產生的後反射向量 (u,v,w) 用來取樣最終紋理階段上的紋理。 系統會忽略指派給上述兩個紋理階段的任何紋理。
此指令必須搭配兩個 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
texm3x3spec t(m+2), t(n), c0 // 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 (stage m+1) UVW * t (n) RGB
texm3x3spec 指令會執行乘以尋找 w'的第三個數據列。
w' = TextureCoordinates (stage m+2) UVW * t (n) RGB
texm3x3spec 指令接著會執行反映計算。
(u' , v' , w' ) = 2*[ (N*E) / (N*N) ]*N - E
其中一般 N 是由
N = (u' , v' , w' )
而眼球光向量 E 是由常數暫存器提供
E = c# (可以使用任何常數 register--c0、c1、c2 等。---)
最後,texm3x3spec 指令範例 t (m+2) , (u',v',w') ,並將結果儲存在 t (m+2) 中。
t (m+2) RGBA = TextureSample (stage m+2) RGBA using (u' , v' , w' ) as 座標
範例
以下是紋理貼圖和識別紋理階段的範例著色器。
ps_1_1
tex t0 // Bind texture in stage 0 to register t0 (tn must
// be defined in some way before it is used)
texm3x3pad t1, t0 // First row of matrix multiply
texm3x3pad t2, t0 // Second row of matrix multiply
texm3x3spec t3, t0, c# // Third row of matrix multiply to get a 3-vector
// Reflect 3-vector by the eye-ray vector in c#
// Use reflected vector to lookup texture in
// 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 會指派磁片區或立方體紋理貼圖。 紋理會提供 RGBA) (色彩資料。
- 眼球光向量 E 是由常數暫存器 E = c# 提供。
相關主題