簡介
glBlendFunc 函數(shù)指定像素算術。
語法
void WINAPI glBlendFunc(
GLenum sfactor,
GLenum dfactor
);
參數(shù)
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
調(diào)用 glBegin 和 glEnd 的相應調(diào)用之間被調(diào)用該函數(shù)。
備注
在 RGB 模式下可以使用混合使用幀緩沖區(qū)(目標值)中已有的 RGBA 值傳入的(源) RGBA 值的函數(shù)繪制像素為單位)。默認情況下,混合處于禁用狀態(tài)。啟用和禁用混合使用 glEnableglDisable GL_BLEND 參數(shù)。
當啟用,glBlendFunc 定義混合的操作。 sfactor 參數(shù)指定的九個方法,用于擴展源顏色分量。 dfactor 參數(shù)指定的八個方法,用于擴展目標顏色分量。十一個可能的方法是在下表中所述。每個方法定義四個規(guī)模因素 — — 為紅色、綠色、藍色和阿爾法各一個。
在表中,并在隨后方程在源和目標顏色組件被稱為 (R s ,G s 、 B s , s )和(R d ,G d 、 B d , d )。他們被理解為是具有零之間的整數(shù)值和(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 研發(fā)、 m G 、 m B 、 m A )是紅色綠色、藍白 alpha bitplanes 數(shù)。
源和目標規(guī)模因素被稱為(s R 、 s G 、 s B 、 s A )和(d 研發(fā)、 d G 、 d B 、 d A )。表示的表中所述的規(guī)模因素( f R f、 G 、 f B 、 f A ),表示源或目標的因素。所有規(guī)模因素都有范圍 [0]。
參數(shù)
(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 值,系統(tǒng)使用以下公式:
(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)
盡管兩地精度明顯,上述方程的混合算法不完全指定,因為混合操作具有不精確的整數(shù)顏色值。但是,應等于之一的一個混合因素保證不會修改其被乘數(shù),并為零的混合因子等將其被乘數(shù)減少到零。因此,例如當 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
示例
透明度最好實現(xiàn)使用 glBlendFunc ( GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA )與基元從最遠到最近的排序。請注意此透明度計算不需要 alpha bitplanes,幀緩沖區(qū)中的存在。
您還可以使用 glBlendFunc ( GL_SRC_ALPHA GL_ONE_MINUS_SRC_ALPHA ) 按任意順序呈現(xiàn)是鋸消除點和線。
若要優(yōu)化的多邊形消除鋸齒,使用 glBlendFunc ( GL_SRC_ALPHA_SATURATE GL_ONE )與排序從最近的最遠的多邊形。 (見中 glEnable 的 GL_POLYGON_SMOOTH 參數(shù)信息的多邊形消除鋸齒)。目標 alpha bitplanes 必須正確操作此混合函數(shù)存在存儲累積的覆蓋范圍。
傳入(源)字母是從 1.0 (K A) 代表完整透明度為 0.0 (0) 表示完全透明一材料的不透明度。
在啟用多個顏色緩沖區(qū)的繪圖時每個已啟用的緩沖區(qū)分開,混合,緩沖區(qū)的內(nèi)容用于目標顏色。 (請參閱 glDrawBuffer。
混合影響唯一 RGBA 呈現(xiàn)。它的顏色索引呈現(xiàn)器忽略。