在OpenGL之顏色混合alpha通過glBlendFunc()設定的混合因子生成透明效果,但通過其它的混合因子可產生更多不同的混合效果.令外OpenGL的顏色混合是無需啟用光照的glEnable(GL_LIGHTING); 但需要啟動多邊形隱面裁剪::glEnable(GL_CULL_FACE);否則會有一面會繪畫錯誤.
混合因子演示程式.下載
- 設定Sour Factor選擇”來源混合因子”
- 設定Dest Factor選擇”目標混合因子”
- 設定Blend Equation選擇”混合公式”
glBlendFunc()的混合公式 | 簡介 |
GL_FUNC_ADD | C =(Cs*S)+(Cd*D) 默認值 |
GL_MIN | C =MIN(Cs,Cd) |
GL_MAX | C =MAX(Cs,Cd) |
GL_FUNC_SUBTRACT | C =(Cs*S)-(Cd*D) |
GL_FUNC_REVERSE_SUBTRACT | C =(Cd*S)-(Cs*D) |
公式因子 | 簡介:混合因子的簡介可通過最下表查閱 |
Cs: | 來源顏色 |
S: | 來源混合因子 |
Cd: | 目標顏色 |
D: | 目標混合因子 |
S來源混合因子 | 簡介 |
GL_ZERO | sour (r,g,b,a) *{0,0,0,0} |
GL_ONE | sour (r,g,b,a) * (1,1,1,1) |
GL_DST_COLOR | sour (r,g,b,a) * dest (r,g,b,a) |
GL_ONE_MINUS_DST_COLOR | sour (r,g,b,a) * ((1,1,1,1)- dest(r,g,b,a)) |
GL_SRC_ALPHA | sour (r,g,b,a) * sour(alpha) |
GL_ONE_MINUS_SRC_ALPHA | sour (r,g,b,a) * (1- sour(alpha)) |
GL_DST_ALPHA | sour (r,g,b,a) * dest(alpha) |
GL_ONE_MINUS_DST_ALPHA | sour (r,g,b,a) * (1- dest(alpha)) |
GL_SRC_ALPHA_SATURATE | sour (r,g,b,a) * MIN(sour(alpha),1-dest(alpha)) |
GL_CONSTANT_COLOR | sour (r,g,b,a)* Color(r,g,b,a) |
GL_ONE_MINUS_CONSTANT_COLOR | sour (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a)) |
GL_CONSTANT_ALPHA | sour (r,g,b,a)* Color(alpha) |
GL_ONE_MINUS_CONSTANT_ALPHA | sour (r,g,b,a)*(1-Color(alpha)) |
D目標混合因子 | 簡介 |
GL_ZERO | dest (r,g,b,a) *{0,0,0,0} |
GL_ONE | dest (r,g,b,a) * (1,1,1,1) |
GL_SRC_COLOR | dest (r,g,b,a) * sour (r,g,b,a) |
GL_ONE_MINUS_SRC_COLOR | dest (r,g,b,a) * ((1,1,1,1)- sour (r,g,b,a)) |
GL_SRC_ALPHA | dest (r,g,b,a) * sour (alpha) |
GL_ONE_MINUS_SRC_ALPHA | dest (r,g,b,a) * (1- sour (alpha)) |
GL_DST_ALPHA | dest (r,g,b,a) * dest (alpha) |
GL_ONE_MINUS_DST_ALPHA | dest (r,g,b,a) * (1- dest (alpha)) |
GL_SRC_ALPHA_SATURATE | dest (r,g,b,a) * MIN(sour(alpha),1-dest(alpha)) |
GL_CONSTANT_COLOR | dest (r,g,b,a)* Color(r,g,b,a) |
GL_ONE_MINUS_CONSTANT_COLOR | dest (r,g,b,a)*( (1,1,1,1)- Color(r,g,b,a)) |
GL_CONSTANT_ALPHA | dest (r,g,b,a)* Color(alpha) |
GL_ONE_MINUS_CONSTANT_ALPHA | dest (r,g,b,a)*(1-Color(alpha)) |
上表的Color混合常量通過glBlendColor()設定
設定混合常量 | 簡介 |
Void glBlendColor(GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha; | 混合常量默認為(0,0,0,0)作為混合權重係數 |