框架緩衝區 Alpha (Direct3D 9)
畫面緩衝區 Alpha 混合與頂點 Alpha、材質 Alpha 和紋理 Alpha 有點不同。 頂點、材質和紋理 Alpha 集合透明度值,僅用於目前基本類型,而且本身不會影響其他基本類型。 框架緩衝區 Alpha 混合控制目前基本類型與框架緩衝區中現有圖元的結合方式,以產生最終圖元色彩。
執行 Alpha 混合時,會結合兩種色彩:來源色彩和目的地色彩。 來源色彩來自透明物件,目的色彩是已位於圖元位置的色彩。 目的色彩是呈現透明物件後方的一些其他對象的結果,也就是透過透明物件可見的物件。 Alpha 混合會使用公式來控制來源和目的對象之間的比率。
Final Color = ObjectColor * SourceBlendFactor + PixelColor * DestinationBlendFactor
ObjectColor 是目前圖元位置所呈現之基本類型的貢獻。 PixelColor 是目前圖元位置框架緩衝區的貢獻。
以下列出一組可使用的Alpha混合因數。
混合模式因素 | 描述 |
---|---|
D3DBLEND_ZERO | (0, 0, 0, 0) |
D3DBLEND_ONE | (1, 1, 1, 1) |
D3DBLEND_SRCCOLOR | (Rs、Gs、Bs、As) |
D3DBLEND_INVSRCCOLOR | (1-Rs、1-Gs、1-Bs、1-As) |
D3DBLEND_SRCALPHA | (As、As、As、As) |
D3DBLEND_INVSRCALPHA | (1-As、1-As、1-As、1-As) |
D3DBLEND_DESTALPHA | (廣告、廣告、廣告、廣告) |
D3DBLEND_INVDESTALPHA | (1-Ad、1-Ad、1-Ad、1-Ad) |
D3DBLEND_DESTCOLOR | (路,Gd,Bd,廣告) |
D3DBLEND_INVDESTCOLOR | (1路,1-Gd,1-Bd,1-Ad) |
D3DBLEND_SRCALPHASAT | (f、f、f、1):f = min(As, 1-Ad) |
D3DBLEND_BOTHSRCALPHA | DirectX 6 和更新版本已過時。 您可以將來源和目的地混合因數設定為在個別呼叫中D3DBLEND_SRCALPHA和D3DBLEND_INVSRCALPHA,以達到相同的效果。 |
D3DBLEND_BOTHINVSRCALPHA | DirectX 6 已過時。 您可以將來源和目的地混合因數設定為在不同的呼叫中D3DBLEND_INVSRCALPHA和D3DBLEND_SRCALPHA,以達到相同的效果。 |
D3DBLEND_BLENDFACTOR | 使用 color.r、color.g、color.b 和 color.a,從 D3DRS_BLENDFACTOR 設定取得。 |
D3DBLEND_INVBLENDFACTOR | 使用 1-color.r、1-color.g、1-color.b 和 1-color.a,從 D3DRS_BLENDFACTOR 設定取得。 |
Direct3D 會使用D3DRS_ALPHABLENDENABLE轉譯狀態來啟用 Alpha 透明度混合。 完成的Alpha混合類型取決於D3DRS_SRCBLEND和D3DRS_DESTBLEND轉譯狀態。 來源和目的地混合狀態會用在配對中。 下列代碼段會將來源混合狀態設定為 D3DBLEND_SRCCOLOR,並將目的地混合狀態設定為 D3DBLEND_INVSRCCOLOR。
// This code fragment assumes that lpD3DDevice is a
// valid pointer to a device.
// Enable alpha blending.
lpD3DDevice->SetRenderState(D3DRS_ALPHABLENDENABLE,
TRUE);
// Set the source blend state.
lpD3DDevice->SetRenderState(D3DRS_SRCBLEND,
D3DBLEND_SRCCOLOR);
// Set the destination blend state.
lpD3DDevice->SetRenderState(D3DRS_DESTBLEND,
D3DBLEND_INVSRCCOLOR);
此程式代碼會在來源色彩之間執行線性混合(在目前位置呈現的基本類型色彩)和目的色彩(畫面緩衝區中目前位置的色彩)。 產生的外觀類似於有色玻璃,而目的物件的某些色彩似乎透過來源物件傳輸:其餘部分似乎被吸收了。
其中許多混合因數都需要紋理中的Alpha值才能正確運作。 因此,使用頂點或材質 Alpha 時,應用程式會限製為哪些模式會產生有趣的結果。
相關主題