OpenGL之顏色混合alpha

OpenGL之顏色混合alpha

顏色混合(alpha)可實現透明的視角效果,可以模擬液體、玻璃等.當你啟動混合OpenGL將輸入源的顏色與和在幀緩存裏的顏色混合

函式 簡介
glEnable(GL_BLEND); 啟用混合
glDisable(GL_BLEND); 禁用混合
函式 簡介
Void glColor4f (GLfloat red, GLfloat green, GLfloat blue, GLfloat alpha); 設定顏色和透明度
red, green, blue 顏色
alpha 透明度數值範圍:0.0f-1.0f

0:全透明

1:完全不透明

函式示例

  1. glEnable(GL_BLEND);// 啟用混合
  2. glDepthMask(GL_FALSE);// 將深度環存設置為只讀
  3. glBlendFunc(GL_SRC_ALPHA,GL_ONE); // 透明效果
  4. glColor4f(1.0f, 1.0f, 1.0f,alpha);//月球模型顏色
  5. auxSolidSphere(1.0f);// 繪畫
  6. glDepthMask(GL_TRUE);// 將深度環存設置為可讀可寫
  7. glDisable(GL_BLEND);// 禁用混合
混合函式 簡介
void glBlendFunc (GLenum sfactor, GLenum dfactor); 設定來源和目標混合係數
sfactor 輸入源數據的混合係數
dfactor 當前幀緩存的混合係數

 

混合係數 簡介
GL_ZERO 將顏色設為{0,0,0,0}
GL_ONE 不改變當前顏色(r,g,b,a)*(1,1,1,1)
GL_SRC_COLOR 目標與來源相乘dest (r,g,b,a)* sour (r,g,b,a)
GL_DST_COLOR 來源與目標相乘sour (r,g,b,a)* dest (r,g,b,a)
GL_ONE_MINUS_SRC_COLOR (r,g,b,a)*((1,1,1,1)- sour(r,g,b,a))
GL_ONE_MINUS_DST_COLOR (r,g,b,a)*((1,1,1,1)- dest(r,g,b,a))
GL_SRC_ALPHA (r,g,b,a) * sour(alpha)
GL_DST_ALPHA (r,g,b,a) * dest(alpha)
GL_ONE_MINUS_SRC_ALPHA (r,g,b,a) * (1- sour(alpha))
GL_ONE_MINUS_DST_ALPHA (r,g,b,a) * (1- dest(alpha))
GL_SRC_ALPHA_SATURATE (r,g,b,a) *MIN (sour(alpha),1-dest(alpha))

 

函式 簡介
glEnable(GL_DEPTH_TEST); 打開深度檢測(Z軸緩存), 一定要調用.保證光照正確繪製和模形前後正確繪製

Alpha演示程式示例,分別有太陽,地球和月球.下載程式

  1. 按+/-鍵增加或減小月球透明度
  2. 按SPACE(空格)鍵啟用或禁用聚光燈
  3. 按UP/DOWN鍵相機前後移動
  4. 按LEFT/RIGHT鍵相機左右旋轉
  5. 按F1鍵打開幫助
  6. 按ESC鍵重置聚光燈參數

評論