簡介
glBlendFunc 函式指定像素算術。
語法
void WINAPI glBlendFunc(
GLenum sfactor,
GLenum dfactor
);
參數
sfactor
指定如何計算紅綠色、 藍白 alpha 源混合因素。 接受了九個符號常量: GL_ONE_MINUS_DST_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_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。
返回值
返回以下錯誤代碼和他們的條件。
返回代碼
說明
GL_INVALID_ENUM
sfactor 或 dfactor 不被接受的值。
GL_INVALID_OPERATION
調用 glBegin 和 glEnd 的相應調用之間被調用該函式。
備註
在 RGB 模式下可以使用混合使用幀緩衝區 (目標值) 中已有的 RGBA 值傳入的 (源) RGBA 值的函式繪製像素為單位)。 默認情況下,混合處於禁用狀態。 啟用和禁用混合使用 glEnable glDisable GL_BLEND 參數。
當啟用,glBlendFunc 定義混合的操作。 sfactor 參數指定的九個方法,用於擴展源顏色分量。 dfactor 參數指定的八個方法,用於擴展目標顏色分量。 十一個可能的方法是在下表中所述。 每個方法定義四個規模因素 — — 為紅色、 綠色、 藍色和阿爾法各一個。
在表中,並在隨後方程在源和目標顏色組件被稱為 (R s ,G s 、 B s , s ) 和 (R d ,G d 、 B d , d )。 他們被理解為是具有零之間的整數值和 (k R 、 k G 、 k R 、 k A ),其中
kR = 2 m R-1
kG = 2 m G-1
kB = 2 m B-1
kA = 2 m A-1
和 (m 研發 、 m G 、 m B 、 m A ) 是紅色綠色、 藍白 alpha bitplanes 數。
源和目標規模因素被稱為 (s R 、 s G 、 s B 、 s A ) 和 (d 研發 、 d G 、 d B 、 d A )。 表示的表中所述的規模因素 ( f R f、 G 、 f B 、 f A ),表示源或目標的因素。 所有規模因素都有範圍 [0]。
參數
(f R f、 G 、 f B 、 f A )
GL_ZERO
(0,0,0,0)
GL_ONE
(1,1,1,1)
GL_SRC_COLOR
(R s / s k R 、 G / k G 、 B s / k B、 A s / k A)
GL_ONE_MINUS_SRC_COLOR
(1,1,1,1)-(R s / s k R 、 G / k G 、 B s / k B、 A s / k A)
GL_DST_COLOR
(R d / d k R 、 G / k G 、 B d / k B、 A d / k A)
GL_ONE_MINUS_DST_COLOR
(1,1,1,1)-(R d / d k R 、 G / k G 、 B d / k B、 A d / k A)
GL_SRC_ALPHA
(A s / s k A 、 A / s k A 、 A / k A、 A s / k A)
GL_ONE_MINUS_SRC_ALPHA
(1,1,1,1)-(A s / s k A 、 A / s k A 、 A / k A、 A s / k A)
GL_DST_ALPHA
(A d / k A , d / k A A、 d / k A、 A d / k A)
GL_ONE_MINUS_DST_ALPHA
(1,1,1,1)-(A d / k A , d / k A A、 d / k A、 A d / k A)
GL_SRC_ALPHA_SATURATE
(我,我, 1)
在的表
我 = 分鐘 (A s 、 k A-A d) / k A
繪製 RGBA 模式中時,請確定像素的混合的 RGBA 值,系統使用以下公式:
(d) R = 分鐘 (k R 、 R s s R + R d d R)
(d) G = 分鐘 (k G ,G s s G + G d d G)
(d) B = 分鐘 (k B 、 B s s B + B d d B)
(d) = 分鐘 (k A , s s A + A d d A)
儘管兩地精度明顯,上述方程的混合算法不完全指定,因為混合操作具有不精確的整數顏色值。 但是,應等於之一的一個混合因素保證不會修改其被乘數,並為零的混合因子等將其被乘數減少到零。 因此,例如當 sfactor 是 GL_SRC_ALPHA、 dfactor 是 GL_ONE_MINUS_SRC_ALPHA,和 A s 等於 k A,方程降低簡單更換:
Rd = R s
Gd = G s
B d = B s
Ad = A s
示例
透明度最好實現使用 glBlendFunc ( GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA ) 與基元從最遠到最近的排序。 請注意此透明度計算不需要 alpha bitplanes,幀緩衝區中的存在。
您還可以使用 glBlendFunc ( GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA ) 按任意順序呈現是鋸消除點和線。
若要最佳化的多邊形消除鋸齒,使用 glBlendFunc ( GL_SRC_ALPHA_SATURATE GL_ONE ) 與排序從最近的最遠的多邊形。 (見中 glEnable 的 GL_POLYGON_SMOOTH 參數信息的多邊形消除鋸齒)。 目標 alpha bitplanes 必須正確操作此混合函式存在存儲累積的覆蓋範圍。
傳入 (源) 字母是從 1.0 (K A) 代表完整透明度為 0.0 (0) 表示完全透明一材料的不透明度。
在啟用多個顏色緩衝區的繪圖時每個已啟用的緩衝區分開,混合,緩衝區的內容用於目標顏色。 (請參閱 glDrawBuffer。
混合影響唯一 RGBA 呈現。 它的顏色索引呈現器忽略。