共用方式為


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# 提供。

圖元著色器指示