打開(kāi)混合
glEnable(GL_BlEND);
當(dāng)兩個(gè)圖層疊加,一個(gè)圖層是半透明,一個(gè)圖層是非半透明,就需要開(kāi)啟顏色混合,將兩個(gè)圖層的顏色進(jìn)行混合。
顏色是如何混合的(顏色混合方程式)
Cf = (Cs * S) + (Cd * D); //默認(rèn)混合方程式
Cf 最終計(jì)算出的顏色
Cs 源顏色
Cd 目標(biāo)顏色
S 源混合因子
D 目標(biāo)混合因子
假設(shè)進(jìn)來(lái)一個(gè)新的顏色是藍(lán)色(0.0, 0.0, 1.0, 0.6),要被替換掉的顏色是紅色(1.0, 0.0, 0.0, 1.0),那么
Cs(源顏色)= (0.0, 0.0, 1.0, 0.6)
Cd(目標(biāo)顏色)= (1.0, 0.0, 0.0, 1.0)
S = 源顏色alpha值 = 0.6
D = 1- S = 0.4
Cf = (Cs * S) + (Cd * D) = (藍(lán)色 * 0.6)+ (紅色 * 0.4)
設(shè)置混合因子
glBlendFunc(GLenum S,GLenum D);
自定義顏色混合方程式
glbBlendEquation(GLenum mode);//選擇混合方程模式
// glbBlendEquation(GL_FUNC_ADD); // 默認(rèn)方式
| 模式 | 函數(shù) |
|---|---|
| GL_FUNC_ADD | Cf = (Cs * S) + (Cd * D) |
| GL_FUNC_SUBTRACT | Cf = (Cs * S) - (Cd * D) |
| GL_FUNC_REVERSE_SUBTRACT | Cf =(Cd * D)- (Cs * S) |
| GL_MIN | min(Cs, Cd) |
| GL_MAX | max(Cs, Cd) |
常量混合顏色為黑色,glBlendColor可修改常量顏色
void glBlendColor(GLclampf red ,GLclampf green ,GLclampf blue ,GLclam pf alpha );
總結(jié)
- 混合函數(shù)一般用于在一些不透明的圖形上加一個(gè)透明的圖形的效果