紋理篩選 (Direct3D 9)
當 Direct3D 轉譯原始物件時,會將 3D 原始物件對應到 2D 畫面上。 若原始物件帶有紋理,Direct3D 必須使用該紋理為原始物件的 2D 轉譯影像中的每個像素產生色彩。 針對畫面上原始物件影像的每個像素,程式必須從紋理中取得色彩值。 這個過程稱為「紋理篩選」。
執行紋理篩選作業時,通常也會放大或縮小使用的紋理。 換句話說,其會對應到比自身大或小的原始影像。 放大紋理可能會導致許多像素對應到一個材質。 其結果可能為外觀粗短。 縮小紋理通常表示一個像素會對應到許多材質。 其結果影像可能會顯得模糊或帶有鋸齒。 若要解決這些問題,您必須對材質色彩稍作混合,以達到像素的色彩。
Direct3D 將複雜的紋理篩選過程予以簡化。 Direct3D 提供您三種紋理篩選的類型:線性篩選、非等向性篩選,及 Mipmap 篩選。 如果您並未選擇任何紋理篩選方式,Direct3D 會使用一種稱作「最近點取樣」的技術。
每一種紋理篩選都有優點和缺點。 例如:線性紋理篩選可能會使最終影像產生鋸齒狀的邊緣,或是矮胖的外觀。 然而,其為運算上低負荷的一種紋理篩選方法。 使用 Mipmap 進行紋理篩選通常會產生最好的結果,特別是與非等向性篩選搭配使用時。 然而,其在 Direct3D 支援的技術中是最消耗記憶體的一種。
使用紋理介面指標的應用程式應該呼叫 IDirect3DDevice9::SetSamplerState 方法來設定目前的紋理篩選方法。 將第一個參數的值設定為您選取紋理篩選方法的整數索引編號, (0-7) 。 傳遞第二個參數的D3DSAMP_MAGFILTER、D3DSAMP_MINFILTER或D3DSAMP_MIPFILTER,以設定放大、縮小或 mipmapping 篩選。 傳遞 D3DTEXTUREFILTERTYPE 列舉型別的成員作為第三個參數中的值。
本節提供 Direct3D 支援的紋理篩選方法。 它會組織成下列主題。
- Direct3D 9 (近點取樣)
- Direct3D 9 (線性紋理篩選)
- Direct3D 9 (雙線性紋理篩選)
- Direct3D 9 (等向性紋理篩選)
- 使用 Mipmap 的紋理篩選 (Direct3D 9)
注意
雖然 D3DRENDERSTATETYPE 列舉類型中存在的紋理篩選轉譯狀態會由紋理階段狀態取代,但 IDirect3DDevice9::SetRenderState與 IDirect3DDevice2 版本相反,如果您嘗試使用這些狀態,則不會失敗。 相反地,系統會將這些轉譯狀態的效果對應到多重文字串聯階段的第一個階段,階段 0。 應用程式不應將舊版轉譯狀態與其對應的紋理階段狀態混合,因為可能發生無法預期的結果。
相關主題