glBlendFunc 函式

GlBlendFunc 函數會指定圖元算術。

語法

void WINAPI glBlendFunc(
   GLenum sfactor,
   GLenum dfactor
);

參數

sfactor

指定如何計算紅色、綠色、藍色和 Alpha 來源混合因數。 接受九個符號常數: GL _ 零、gl _ 1、GL _ DST _ 色彩、gl _ 1 _ 減去 _ DST _ 色彩、gl _ 來源 _ Alpha、GL _ 1 _ 減去 _ SRC _ Alpha、gl _ DST _ Alpha、gl _ 1 _ 減去 _ dst _ Alpha,以及 GL _ SRC _ Alpha _ 飽和。

dfactor

指定如何計算紅色、綠色、藍色和 Alpha 目的地混合因數。 接受八個符號常數: GL _ 零、gl _ 1、gl _ SRC _ 色彩、gl _ 1 _ 減去 _ SRC _ 色彩、gl _ src _ Alpha、gl _ _ 減去 _ src _ Alpha、gl _ DST _ Alpha 和 gl _ 1 _ 減去 _ DST _ Alpha。

傳回值

此函式不會傳回值。

錯誤碼

GlGetError函式可以取出下列錯誤碼。

Name 意義
GL _ 無效 _ 列舉
Sfactordfactor 都不是可接受的值。
GL _ 不正確 _ 操作
呼叫 glBegin 和對應的 glEnd呼叫之間呼叫了函數。

備註

在 RGB 模式中,可以使用混合傳入 (來源) RGBA 值的函式,以及已在目的地值) 的 (畫面格緩衝區中的 RGBA 值來繪製圖元。 依預設,會停用混色。 使用 glEnableglDisable 搭配 GL _ BLEND 引數來啟用和停用混合。

啟用時, glBlendFunc 會定義混合的運算。 Sfactor 參數會指定使用九種方法來調整來源色彩元件的大小。 Dfactor 參數會指定用來調整目的地色彩元件的八種方法。 下表說明了11種可能的方法。 每個方法都會定義四個縮放因數,分別用於紅色、綠色、藍色和 Alpha。

在資料表和後續的方商中,來源和目的地色彩元件稱為 (R? , G? , B? , : ) 和 (RdGdBd 、 ** d ) 。 其可理解的整數值介於零和 (krkGkrkA ) ,其中

kr = 2 mr -1

kg = 2 mg -1

kb = 2 mb -1

ka = 2 ma -1

和 (mRmGmBmA ) 是紅色、綠色、藍色和 Alpha bitplanes 的數目。

來源和目的縮放比例稱為 (srsGsBs) 和 (drdGdBdA ) 。 表格中描述的比例因素(表示 (fRfGfBfA ) )代表來源或目的地因素。 所有比例因素的範圍為 [ 0、1 ] 。

參數 (fRfGfBfA )
GL _ 零 (0,0,0,0)
GL _ 1 (1,1,1,1)
GL _ SRC _ 色彩 (R? / kRG? / kGB? / kBA? / k)
GL _ 1 _ 減去 _ SRC _ 色彩 (1,1,1,1) (R? / kRG? / kGB? / kBA? / k)
GL _ DST _ 色彩 (rd / kRgd / kGBd / kBad / ka )
GL _ 1 _ 減去 _ DST _ 色彩 (1,1,1,1) (Rd / krGd / kGBd / kb 、 ** d / ka )
GL _ SRC _ ALPHA (? / ka? / ka? / ka? / k)
GL _ 1 _ 減去 _ SRC _ ALPHA (1,1,1,1) (A? / ka? / ka? / ka? / k)
GL _ DST _ ALPHA (** d / kaad / ka 、 ** d / kaad / ka )
GL _ 1 _ 減去 _ DST _ ALPHA (1,1,1,1) (Ad / kaadk a、d / / kaad / ka )
GL _ SRC _ ALPHA _ 飽和 (i、i、i、 1)

在表格中,

i = 最小 (A? , ka - ad ) / ka

若要在以 RGBA 模式繪製時判斷圖元的混合 RGBA 值,系統會使用下列方程式:

R (d) = min ( krrsr + rd ** r )

G (d) = min ( kg g *?*sg + gd dg )

B (d) = min ( kb ,bsb + bd db )

( d) = min ( ka *?*sa a + ad a )

儘管上述方程式有明顯的精確度,但不會完全指定混合算術,因為混合的運算會以不精確的整數色彩值來運作。 不過,應該等於1的 blend 因數保證不會修改其被乘數,而 blend 因數等於零則會將其被乘數減少為零。 因此,例如,當 sfactor 為 gl _ src Alpha 時 _ , dfactor 是 gl _ 1 _ 減去 _ SRC _ ALPHA,而 A?等於 kA,則方程式會減少為簡單的取代:

Rd = r

Gd = g

B d = b

Ad = a

範例

透明度最適合使用 glBlendFunc (GL _ SRC _ Alpha、gl _ 1 _ 減去 _ SRC _ Alpha) ,基本專案從最遠到最接近。 請注意,這個透明度計算不需要在畫面格緩衝區中出現 Alpha bitplanes。

您也可以使用 glBlendFunc (GL _ SRC _ Alpha、gl _ 1 _ 減去 _ SRC _ Alpha) ,以任意順序呈現反鋸齒的點和線條。

若要將多邊形消除鋸齒優化,請使用 glBlendFunc (GL _ SRC _ _ _) ALPHA (查看 _ glEnable 中的 GL 多邊形 _ 平滑引數,以取得有關多邊形消除鋸齒的資訊 ) 。必須要有這個 blend 函式的 bitplanes 目的地 Alpha,才能正常運作,請儲存累積的涵蓋範圍。

傳入的 (來源) Alpha 是一種材質不透明度,範圍從 1.0 (K) , 代表完整的不透明度,到 0.0 (0) ,代表完整的透明度。

當您為繪圖啟用一個以上的色彩緩衝區時,每個啟用的緩衝區都會個別混合,而緩衝區的內容會用於目的地色彩。 (參閱 glDrawBuffer。 )

混色只會影響 RGBA 轉譯。 色彩索引轉譯器會忽略它。

下列函式會取出與 glBlendFunc 相關的資訊:

具有引數 GL _ BLEND _ SRC 的 glGet

具有引數 GL _ BLEND _ DST 的 glGet

具有引數 GL _ BLEND 的 glIsEnabled

規格需求

需求
最低支援的用戶端
Windows 2000 Professional [僅限傳統型應用程式]
最低支援的伺服器
Windows 2000 Server [僅限傳統型應用程式]
標頭
Gl
程式庫
Opengl32 .lib
DLL
Opengl32.dll

另請參閱

glAlphaFunc

glBegin

glClear

glDisable

glDrawBuffer

glEnable

glGet

glIsEnabled

glLogicOp

glStencilFunc