共用方式為


texm3x3tex - ps

執行 3x3 矩陣相乘,並使用結果來執行紋理查閱。 texm3x3tex 必須搭配兩個 texm3x3pad 使用 - ps 指示。

Syntax

texm3x3tex dst, src

 

where

  • dst 是目的地暫存器。
  • src 是來源暫存器。

備註

圖元著色器版本 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
texm3x3tex x x x

 

此指令會當做代表 3x3 矩陣乘法運算的三個指令的最後一個,後面接著紋理查閱。 3x3 矩陣是由第三個紋理階段的紋理座標和前兩個紋理階段所組成。 產生的三元件向量 (u,v,w) 用來取樣階段 3 中的紋理。 系統會忽略指派給上述兩個紋理階段的任何紋理。 3x3 矩陣乘法通常適用于將一般向量導向轉譯表面的正確正切空間。

此指令必須與 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
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

以下是如何完成 3x3 乘法的詳細資料。

第一個 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

最後,texm3x3tex 指令範例 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
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

此範例需要下列紋理階段設定。

  • 階段 0 會指派具有一般資料的紋理貼圖。 這通常稱為凸起地圖。 每個紋素的資料 (XYZ) 標準。 紋理座標集 0 定義如何取樣此一般地圖。
  • 紋理座標集 1 會指派給 3x3 矩陣的資料列 1。 系統會忽略指派給階段 1 的任何紋理。
  • 紋理座標集 2 會指派給 3x3 矩陣的資料列 2。 系統會忽略指派給階段 2 的任何紋理。
  • 紋理座標集 3 會指派給 3x3 矩陣的資料列 3。 磁片區或立方體紋理應該設定為階段 3,以供轉換的 3D 向量查閱。

圖元著色器指示