OpenGL之顏色混合

OpenGL之顏色混合

OpenGL之顏色混合alpha通過glBlendFunc()設定的混合因子生成透明效果,但通過其它的混合因子可產生更多不同的混合效果.令外OpenGL的顏色混合是無需啟用光照的glEnable(GL_LIGHTING); 但需要啟動多邊形隱面裁剪::glEnable(GL_CULL_FACE);否則會有一面會繪畫錯誤.

混合因子演示程式.下載

  1. 設定Sour Factor選擇”來源混合因子”
  2. 設定Dest Factor選擇”目標混合因子”
  3. 設定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)作為混合權重係數

 

評論