共用方式為


紋理座標轉換 (Direct3D 9)

Direct3D 裝置可以套用 4x4 矩陣來轉換頂點的紋理座標。 系統會以與幾何相同的方式,將轉換套用至紋理座標。 任何轉換(縮放、旋轉、轉譯、投影、剪力或這些組合)都可以使用 4x4 矩陣來完成。

注意

Direct3D 不會修改已轉換和點亮的頂點。 因此,使用已轉換和點亮頂點的應用程式無法使用 Direct3D 來轉換頂點的紋理座標。

 

支援硬體加速轉換和照明作業的裝置(T&L HAL 裝置)也會加速紋理座標的轉換。 當無法使用轉換的硬體加速時,Direct3D 幾何管線中的平臺特定優化會套用至紋理座標轉換。

紋理座標轉換有助於產生特殊效果,同時避免需要直接修改幾何的紋理座標。 您可以使用簡單的翻譯或旋轉矩陣,以動畫顯示物件上的紋理,也可以轉換 Direct3D 自動產生的紋理座標,以簡化和加速進階效果,例如投影紋理和動態光線對應。 此外,您可以使用紋理座標轉換,在多個紋理階段中,重複使用單一紋理座標集以供多個用途使用。

設定和擷取紋理座標轉換

就像應用程式用於幾何的矩陣一樣,您可以呼叫 IDirect3DDevice9::SetTransform 和 IDirect3DDevice9::GetTransform 方法來設定和擷取紋理座標轉換。 這些方法會透過D3DTRANSFORMSTATETYPE列舉類型的D3DTS_TEXTURE7成員來接受D3DTS_TEXTURE0,以分別識別紋理階段 0 到 7 的轉換矩陣。

下列程式代碼會設定要套用至紋理階段 0 紋理座標的矩陣。

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

D3DMATRIX matTrans = D3DXMatrixIdentity( NULL );

// Set up the matrix for the desired transformation.
d3dDevice->SetTransform( D3DTS_TEXTURE0, &matTrans );

啟用紋理座標轉換

D3DTSS_TEXTURETRANSFORMFLAGS紋理階段狀態可控制紋理座標轉換的應用。 這個紋理階段狀態的值是由 D3DTEXTURETRANSFORMFLAGS 列舉型別所定義。

當D3DTSS_TEXTURETRANSFORMFLAGS設定為 D3DTTFF_DISABLE 時,會停用紋理座標轉換(預設值)。 假設階段 0 已啟用紋理座標轉換,下列程式代碼會停用它們。

// For this example, assume the d3dDevice variable contains a 
// valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_DISABLE );

D3DTEXTURETRANSFORMFLAGS中定義的其他值可用來啟用紋理座標轉換,以及控制有多少產生的紋理座標元素傳遞至轉譯器。 例如,採用下列程序代碼。

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT2 );

D3DTTFF_COUNT2值會指示系統套用紋理階段 0 的轉換矩陣集,然後將修改過的紋理座標的前兩個元素傳遞至轉譯器。

D3DTTFF_PROJECTED紋理轉換旗標會指出投影紋理的座標。 指定此旗標時,轉譯器會將傳入的專案除以最後一個專案。 例如,採用下列程序代碼。

// For this example, assume the d3dDevice variable contains a 
//   valid pointer to an IDirect3DDevice9 interface.

d3dDevice->SetTextureStageState( 0, D3DTSS_TEXTURETRANSFORMFLAGS, 
                                 D3DTTFF_COUNT3 | D3DTTFF_PROJECTED );

本範例會通知系統將三個紋理座標元素傳遞至轉譯器。 轉譯器會將前兩個元素除以第三個元素,產生處理紋理所需的 2D 紋理座標。

紋理座標處理