紋理混合 (Direct3D 9)
Direct3D 可以在一次處理過程中將多達八個紋理混合到圖元。 使用多個紋理混合可以大幅提高 Direct3D 應用程式的幀速率。 應用程式會在單一過程中採用多重紋理混合技術來套用紋理、陰影、鏡面光源、漫射光源和其他特殊效果。
若要使用紋理混合,您的應用程式應該先檢查用戶的硬體是否支援它。 此資訊位於 D3DCAPS9 結構的 TextureCaps 成員中。 如需如何查詢使用者硬體以取得紋理混合功能的詳細資訊,請參閱 IDirect3DDevice9::GetDeviceCaps。
紋理階段和紋理混合串聯
Direct3D 支援透過紋理階段使用單次通過多重紋理混合。 紋理階段會採用兩個自變數,並在它們上執行混合作業,傳遞結果以進行進一步處理或點陣化。 您可以將紋理階段可視化,如下圖所示。
紋理階段的
如上圖所示,紋理階段會使用指定的運算符來混合兩個自變數。 一般作業包括簡單的調節或加入自變數的色彩或 Alpha 元件,但支援二十多項作業。 階段的自變數可以是相關聯的紋理、重複的色彩或 Alpha(在 Gouraud 底紋期間重複)、任意色彩和 Alpha,或上一個紋理階段的結果。 如需詳細資訊,請參閱 紋理混合作業和自變數 (Direct3D 9)。
注意
Direct3D 會區分色彩混合與 Alpha 混合。 應用程式會個別設定色彩和Alpha的混合作業和自變數,而這些設定的結果彼此無關。
多個混合階段所使用的自變數和作業組合會定義簡單的流程式混合語言。 一個階段的結果會流向另一個階段,從該階段流向下一個階段,如此類推。 從階段流向階段到最終在多邊形上陣化的結果概念通常稱為紋理混合串聯。 下圖顯示個別紋理階段如何組成紋理混合串聯。
裝置中的每個階段都有以零起始的索引。 Direct3D 最多可允許八個混合階段,不過您應該一律檢查裝置功能,以判斷目前硬體支援多少階段。 第一個混合階段位於索引 0,第二個為 1,依此類推,直到索引 7。 系統會依索引的遞增順序混合階段。
只使用您需要的階段數目;預設會停用未使用的混合階段。 因此,如果您的應用程式只使用前兩個階段,它只需要設定階段 0 和 1 的作業和自變數。 系統會整合這兩個階段,並忽略停用的階段。
注意
如果您的應用程式會因應不同情況調整階段的數量,例如某些物件使用四個階段而其他物件只使用兩個階段,那麼您不需要明確停用所有先前使用過的階段。 其中一個選項是停用第一個未使用階段的色彩作業,則不會套用具有較高索引的所有階段。 另一個選項是將第一階段(階段 0)的紋理映射色彩操作設為 D3DTOP_DISABLE,以完全禁用紋理映射。 第三個選項是當紋理階段的屬性D3DTSS_COLORARG1設為D3DTA_TEXTURE,而該階段的紋理指標為 NULL時,這個階段及其後所有階段都不會被處理。
下列主題包含其他資訊。
- 紋理混合作業和自變數 (Direct3D 9)
- 指派目前紋理 (Direct3D 9)
- 建立混合階段(Direct3D 9)
- Alpha 紋理混合 (Direct3D 9)
- 多通道紋理混合技術(Direct3D 9)
- 使用紋理的光線映射(Direct3D 9)
相關主題