共用方式為


框架緩衝區 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 時,應用程式會限製為哪些模式會產生有趣的結果。

Alpha 混合