共用方式為


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 的紋理座標資料。

圖元著色器指示