glBlendFunc 函式
glBlendFunc函式會指定圖元算術。
語法
void WINAPI glBlendFunc(
GLenum sfactor,
GLenum dfactor
);
參數
-
sfactor
-
指定如何計算紅色、綠色、藍色和 Alpha 來源混合因數。 接受九個符號常數:GL_ZERO、GL_ONE、GL_DST_COLOR、GL_ONE_MINUS_DST_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA、GL_ONE_MINUS_DST_ALPHA和GL_SRC_ALPHA_SATURATE。
-
dfactor
-
指定如何計算紅色、綠色、藍色和 Alpha 目的地混合因數。 接受八個符號常數:GL_ZERO、GL_ONE、GL_SRC_COLOR、GL_ONE_MINUS_SRC_COLOR、GL_SRC_ALPHA、GL_ONE_MINUS_SRC_ALPHA、GL_DST_ALPHA和GL_ONE_MINUS_DST_ALPHA。
傳回值
此函式不會傳回值。
錯誤碼
glGetError函式可以擷取下列錯誤碼。
名稱 | 意義 |
---|---|
|
sfactor或dfactor不是可接受的值。 |
|
在 對 glBegin 的呼叫與 glEnd的對應呼叫之間呼叫函式。 |
備註
在 RGB 模式中,您可以使用函式來繪製圖元,此函式會將傳入 (來源) RGBA 值與已位於框架緩衝區中的 RGBA 值 (目的地值) 。 根據預設,混合功能會停用。 使用 glEnable 和 glDisable 搭配 GL_BLEND 引數來啟用和停用混合。
啟用時, glBlendFunc 會定義混合的作業。 sfactor參數會指定使用九個方法的哪一種方法來調整來源色彩元件。 dfactor參數會指定使用八種方法中的哪一種方法來調整目的地色彩元件。 下表說明十一個可能的方法。 每個方法都會針對紅色、綠色、藍色和 Alpha 定義四個縮放比例。
在資料表和後續方程式中,來源和目的地色彩元件稱為 (R?, G?, B?, A?) 和 (Rd 、 Gd 、 Bd 、 Ad ) 。 其瞭解在零和 (kR、kG、kR、k A ) 之間具有整數值,其中
kR = 2mR - 1
kG = 2mG - 1
kB = 2mB - 1
kA = 2mA - 1
和 (mR 、 mG 、 mB 、 mA ) 是紅色、綠色、藍色和 Alpha 位平面的數目。
來源和目的地縮放比例稱為 (sR 、 sG 、 sB 、 sA ) 和 (dR 、 dG 、 dB 、 dA ) 。 資料表中所述的縮放因數,表示 (fR 、 fG 、 fB 、 fA ) ,代表來源或目的地因素。 所有刻度因數的範圍 [0,1]。
參數 | (fR 、 fG 、 fB 、 fA ) |
---|---|
GL_ZERO | (0,0,0,0) |
GL_ONE | (1,1,1,1) |
GL_SRC_COLOR | (R?/ kR , G?/ kG , B?/ kB , A?/ kA ) |
GL_ONE_MINUS_SRC_COLOR | (1,1,1,1) - (R?/ kR , G?/ kG , B?/ kB , A?/ kA ) |
GL_DST_COLOR | (Rd / kR、Gd / kG、BdkB、Ad / / kA ) |
GL_ONE_MINUS_DST_COLOR | (1,1,1,1) - (Rd / kR、G dkG 、Bd / kB 、Ad / / kA ) |
GL_SRC_ALPHA | (A?/ kA , A?/ kA , A?/ kA , A?/ kA ) |
GL_ONE_MINUS_SRC_ALPHA | (1,1,1,1) - (A?/ kA , A?/ kA , A?/ kA , A?/ kA ) |
GL_DST_ALPHA | (Ad / kA 、 Ad / kA、 AdkA 、 A d / / kA ) |
GL_ONE_MINUS_DST_ALPHA | (1,1,1,1) - (Ad / k A 、Ad / k A 、A dkA 、Ad / / kA ) |
GL_SRC_ALPHA_SATURATE | (i、i、i、 1) |
在表格中,
i = min (A?, kA - d ) / kA
若要在 RGBA 模式中繪製時判斷圖元的混合 RGBA 值,系統會使用下列方程式:
R (d) = min ( kR , R?sR + R ddR )
G (d) = min ( kG , G?sG G + ddG )
B (d) = min ( kB, B?sB B + ddB )
(d) = min ( kA , A?sA + d dA )
雖然上述方程式明顯有效位數,但未完全指定混合算術,因為混合會以不精確的整數色彩值運作。 不過,應該等於一的混合因數保證不會修改其乘法,而混合因數等於零會減少其乘法和零。 例如,當 sfactor GL_SRC_ALPHA時, dfactor 是GL_ONE_MINUS_SRC_ALPHA,而 A?等於 kA,方程式會減少為簡單的取代:
Rd = R?
Gd = G?
Bd = B?
Ad = A?
範例
透明度最適合使用 glBlendFunc (GL_SRC_ALPHA來實作,GL_ONE_MINUS_SRC_ALPHA) 基本類型從最遠到最接近的基本類型。 請注意,此透明度計算不需要在框架緩衝區中存在 Alpha 位平面。
您也可以使用 glBlendFunc (GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA) 任意順序轉譯反鋸齒點和線條。
若要優化多邊形反鋸齒,請使用 glBlendFunc (GL_SRC_ALPHA_SATURATE,GL_ONE) 多邊形從最接近到最遠排序。 (請參閱 glEnable 中的GL_POLYGON_SMOOTH引數,以取得多邊形反鋸齒。) 目的地 Alpha 位平面的資訊,必須存在此混合函數才能正確運作,儲存累積的涵蓋範圍。
傳入 (來源) Alpha 是材質不透明度,範圍從 1.0 (KA ) ,代表完整不透明度,到 0.0 (0) ,代表完整透明度。
當您啟用多個色彩緩衝區進行繪圖時,每個啟用的緩衝區會分開混合,而緩衝區的內容則用於目的地色彩。 (請參閱 glDrawBuffer.)
混合只會影響 RGBA 轉譯。 色彩索引轉譯器會忽略它。
下列函式會擷取 與 glBlendFunc相關的資訊:
glGet with argument GL_BLEND_SRC
glGet with argument GL_BLEND_DST
glIsEnabled with argument GL_BLEND
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 |
Windows 2000 專業版 [僅限傳統型應用程式] |
最低支援的伺服器 |
Windows 2000 Server [僅限傳統型應用程式] |
標頭 |
|
程式庫 |
|
DLL |
|