glBlendFunc,即定義像素算法。
像素可以通過函式操作後被繪出,該函式的功能是將引入的值與顏色緩衝中已有的值混合。使用glEnable方法與glDisable方法以GL_BLEND為參數,決定是否開啟混合功能,該功能初始為關閉的。
當混合功能開啟時glBlendFunc定義混合功能的操作。sfactor指明十一種方法中的一種來衡量源顏色要素,dfactor指明十一種方法中的一種來衡量目的顏色要素。十一種可能的方法將在下面進行介紹。每一種方法定義了四個衡量元素,分別是紅、綠、藍和 alpha。
基本介紹
- 中文名:定義像素算法
- 外文名:glBlendFunc
- 屬性:方程式
簡介,語法,參數,備註,
簡介
glBlendFunc 定義像素算法。
語法
void WINAPI glBlendFunc(GLenum sfactor,GLenum dfactor);
參數
sfactor
指定紅綠藍和 alpha 源混合因子如何計算。初始值為GL_ONE。 接受了九個符號常量: 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_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 R 、 m G 、 m B 、 m A ) 是紅色綠色、 藍白 alpha bitplanes 數。
源和目標規模因素被稱為 (s R 、 s G 、 s B 、 s A ) 和 (d R 、 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
(i,i,i, 1)
在的表
i = min (As ,kA -Ad ) /kA
繪製 RGBA 模式中時,請確定像素的混合的 RGBA 值,系統使用以下公式:
R(d) = min(kR ,RssR +RddR )
G(d) = min(kG ,GssG +GddG )
B(d) = min(kB, BssB +BddB )
A(d) = min(kA ,AssA +AddA )
儘管兩地精度明顯,上述方程的混合算法不完全指定,因為混合操作具有不精確的整數顏色值。 但是,應等於之一的一個混合因素保證不會修改其被乘數,並為零的混合因子等將其被乘數減少到零。 因此,例如當 sfactor 是 GL_SRC_ALPHA、 dfactor 是 GL_ONE_MINUS_SRC_ALPHA,和 A s 等於 k A,方程降低簡單更換:
Rd = Rs
Gd = Gs
B d = Bs
Ad = As
示例
透明度最好使用從最遠到最近存儲圖元的混合函式( 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 )。 目的 alpha 位平面存儲累積的覆蓋,必須使用這個平面以使這個混合函式正確進行操作。
輸入(源) Alpha 可以被看作一種材料不透明性,範圍從 1.0 (KA)開始,這時代表完全不透明度,一直到0.0 (0) 這時代表完全透明。
在啟用多個顏色緩衝區的繪圖時,GL分別為每個已啟用的緩衝區執行混合,使用該緩衝區的內容作為目標顏色。 (請參閱 glDrawBuffer)。