紋理尋址模式 (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] 範圍以外的紋理座標無效,而且在此案例中未定義點陣化這類偏離紋理座標的行為。 啟用紋理換行時,不會使用紋理尋址模式。 在啟用貼圖包覆時,請確保您的應用程式未指定低於 0.0 或高於 1.0 的紋理座標。
設定尋址模式
您可以呼叫 IDirect3DDevice9::SetSamplerState 方法來設定個別紋理階段的紋理尋址模式。 在 Sampler 參數中指定所需的紋理階段標識碼。 將 Type 參數設定為 D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV 或 D3DSAMP_ADDRESSW 值,以分別更新 u、v 或 w 尋址模式。 Value 參數會決定要設定的模式。 這可以是 D3DTEXTUREADDRESS 列舉型別的任何成員。 若要擷取紋理階段目前的紋理位址模式,請使用D3DSAMP_ADDRESSU、D3DSAMP_ADDRESSV或D3DSAMP_ADDRESSW D3DSAMPLERSTATETYPE 列舉的成員,呼叫 IDirect3DDevice9::GetSamplerState,以識別您想要資訊的位址模式。
裝置限制
雖然系統通常允許超出 0.0 和 1.0 範圍的紋理座標,但硬體限制經常會影響這些座標能延伸多遠。 當您擷取裝置功能時,轉譯裝置會在 MaxTextureRepeat 成員 D3DCAPS9 結構中傳達此限制。 此成員中的值描述裝置所允許之紋理座標的完整範圍。 例如,如果此值為 128,則輸入紋理座標必須保留在 -128.0 到 +128.0 的範圍內。 傳遞具有此範圍外紋理座標的頂點無效。 相同的限制適用於自動產生紋理座標和紋理座標轉換所產生的紋理座標。
MaxTextureRepeat 的解譯也會受到 D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE 功能位的影響。 當此位被設定時,MaxTextureRepeat 成員中的值將會被精確地按照描述使用。 不過,若未設定D3DPTEXTURECAPS_TEXREPEATNOTSCALEDBYSIZE,紋理重複的限制取決於由紋理座標所索引之紋理的大小。 在此情況下,MaxTextureRepeat 必須由目前紋理大小調整為最大詳細層級,以計算有效的紋理座標範圍。 例如,假設紋理維度為 32 和 MaxTextureRepeat 為 512,實際的有效紋理座標範圍是 512/32 = 16,因此此裝置的紋理座標必須介於 -16.0 到 +16.0 的範圍內。
紋理尋址模式的其他資訊包含在下列主題中。
相關主題