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函式可以擷取下列錯誤碼。

名稱 意義
GL_INVALID_ENUM
sfactordfactor不是可接受的值。
GL_INVALID_OPERATION
對 glBegin 的呼叫與 glEnd的對應呼叫之間呼叫函式。

備註

在 RGB 模式中,您可以使用函式來繪製圖元,此函式會將傳入 (來源) RGBA 值與已位於框架緩衝區中的 RGBA 值 (目的地值) 。 根據預設,混合功能會停用。 使用 glEnableglDisable 搭配 GL_BLEND 引數來啟用和停用混合。

啟用時, glBlendFunc 會定義混合的作業。 sfactor參數會指定使用九個方法的哪一種方法來調整來源色彩元件。 dfactor參數會指定使用八種方法中的哪一種方法來調整目的地色彩元件。 下表說明十一個可能的方法。 每個方法都會針對紅色、綠色、藍色和 Alpha 定義四個縮放比例。

在資料表和後續方程式中,來源和目的地色彩元件稱為 (R?, G?, B?, A?) 和 (RdGdBdAd ) 。 其瞭解在零和 (kRkGkRk A ) 之間具有整數值,其中

kR = 2mR - 1

kG = 2mG - 1

kB = 2mB - 1

kA = 2mA - 1

和 (mRmGmBmA ) 是紅色、綠色、藍色和 Alpha 位平面的數目。

來源和目的地縮放比例稱為 (sRsGsBsA ) 和 (dRdGdBdA ) 。 資料表中所述的縮放因數,表示 (fRfGfBfA ) ,代表來源或目的地因素。 所有刻度因數的範圍 [0,1]。

參數 (fRfGfBfA )
GL_ZERO (0,0,0,0)
GL_ONE (1,1,1,1)
GL_SRC_COLOR (R?/ kRG?/ kGB?/ kBA?/ kA )
GL_ONE_MINUS_SRC_COLOR (1,1,1,1) - (R?/ kRG?/ kGB?/ kBA?/ kA )
GL_DST_COLOR (Rd / kRGd / kGBdkBAd / / kA )
GL_ONE_MINUS_DST_COLOR (1,1,1,1) - (Rd / kR、G dkGBd / kBAd / / kA )
GL_SRC_ALPHA (A?/ kAA?/ kAA?/ kAA?/ kA )
GL_ONE_MINUS_SRC_ALPHA (1,1,1,1) - (A?/ kAA?/ kAA?/ kAA?/ kA )
GL_DST_ALPHA (Ad / kAAd / kA、 AdkAA 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 ( kRRsR + R ddR )

G (d) = min ( kGGsG G + ddG )

B (d) = min ( kB, BsB B + ddB )

(d) = min ( kAAsA + 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 [僅限傳統型應用程式]
標頭
Gl.h
程式庫
Opengl32.lib
DLL
Opengl32.dll

另請參閱

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc