Direct3D 9 (紋理定址模式)

Direct3D 應用程式可為任何原始物件的任何頂點指派紋理座標。 如需詳細資訊,請參閱 Direct3D 9 (紋理座標) 。 通常您指派給頂點的 u 及 v 紋理座標,都會位於 0.0 到 1.0 (含) 之間。 不過,藉由指派在該範圍之外的紋理座標,您可以建立特殊的紋理效果。

您可以藉由設定紋理定址模式,控制 Direct3D 對 [0.0, 1.0] 範圍以外的紋理座標所執行的動作。 例如:您可以為您的應用程式設定紋理定址模式,讓紋理並排在原始物件之上。

Direct3D 允許應用程式執行紋理包裹。 請務必注意,將紋理定址模式設定為 D3DTADDRESS_WRAP與執行紋理包裝不同。 將紋理定址模式設定為D3DTADDRESS_WRAP會導致來源紋理的多個複本套用至目前的基本類型,並啟用紋理換行變更系統點陣化紋理多邊形的方式。 如需詳細資訊,請參閱 紋理包裝 (Direct3D 9)

啟用紋理包裝可有效地使 [0.0, 1.0] 範圍以外的紋理座標無效,而且在此案例中未定義點陣化這類 Delinquent 紋理座標的行為。 當啟用紋理包裹時,將不會使用紋理定址模式。 請注意:當您啟用紋理包裹時,應用程式將不會指定低於 0.0 或高於 1.0 的紋理座標。

設定定址模式

您可以呼叫 IDirect3DDevice9::SetSamplerState 方法來設定個別紋理階段的紋理定址模式。 在 Sampler 參數中指定所需的紋理階段識別碼。 將 Type 參數設定為D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV或D3DSAMP_ADDRESSW值,以個別更新 u-、v 或 w 位址模式。 Value參數會決定要設定的模式。 這可以是 D3DTEXTUREADDRESS 列舉型別的任何成員。 若要擷取紋理階段的目前紋理位址模式,請呼叫 IDirect3DDevice9::GetSamplerState,使用D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV或D3DSAMP_ADDRESSW D3DSAMPLERSTATETYPE 列舉的成員來識別您想要資訊的位址模式。

裝置限制

雖然系統一般會允許位在 0.0 和 1.0 (含) 範圍之外的紋理座標,硬體限制通常會影響到在該範圍之外紋理座標的最遠距離。 當您擷取裝置功能時,轉譯裝置會在D3DCAPS9結構的MaxTextureRepeat成員中傳達此限制。 此成員中的值描述裝置所允許之紋理座標的完整範圍。 例如:若該值為 128,輸入的紋理座標就必須維持在 -128.0 到 128.0 的範圍之中。 傳送此範圍之外的頂點紋理座標無效。 該項限制同樣適用於自動紋理座標生成產生出的紋理座標,以及紋理座標轉換。

MaxTextureRepeat的解譯也會受到D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE功能位的影響。 設定此位時, MaxTextureRepeat 成員中的值會精確使用,如所述。 不過,未設定D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE時,紋理重複限制取決於紋理座標所編制索引的紋理大小。 在此案例中, MaxTextureRepeat 必須依目前紋理大小在最詳細層級縮放,以計算有效的紋理座標範圍。 例如,假設紋理維度為 32 且 MaxTextureRepeat 為 512,實際的有效紋理座標範圍是 512/32 = 16,因此此裝置的紋理座標必須介於 -16.0 到 +16.0 的範圍內。

下列主題包含紋理定址模式的其他資訊。

基本紋理概念