OpenGL之煙霧

OpenGL之煙霧

煙霧(Fog)使遠距離的物體變暗,近距離的物體變得清晰.是遊戲中常用特效.OpenGL煙霧將每個像素煙霧色進行混合處理.

煙霧演示程式:下載

  1. 按+/-鍵移動煙霧距離
  2. 按ESC鍵重置聚煙霧

煙霧函式演示:

  1. glEnable(GL_FOG);
  2. GLfloat fogColor[] = { 0f, 0.0f, 0.0f };
  3. glFogfv(GL_FOG_COLOR, fogColor);
  4. glFogi(GL_FOG_MODE, GL_LINEAR);
  5. glFogi(GL_FOG_COORD_SRC,GL_FRAGMENT_DEPTH);
  6. glFogf(GL_FOG_START, start);
  7. glFogf(GL_FOG_END, end);
  8. glFogf(GL_FOG_DENSITY, 2f);
  9. Draw_Terrain();
  10. glDisable(GL_FOG);

OpenGL通過glFog()函式設定的距離、顏色、密度生成煙霧

參數 簡介
glFogi(GL_FOG_MODE, GL_LINEAR); 設定混合方程式

GL_LINEAR:線性混合

GL_EXP:指數混合(默認值)

GL_EXP2:二次指數指數混合

glFogf(GL_FOG_DENSITY, 1.2f); 煙霧的單位密度,數值需為正,默認值為1.0
glFogf(GL_FOG_START, start); 煙霧距離視口的近端距離
glFogf(GL_FOG_END, end); 煙霧距離視口的遠端距離
glFogi(GL_FOG_INDEX, 0); 設定煙霧顏色8位調色版索引
GLfloat fogColor[] = { 0.5f, 0.5f, 0.5f };

glFogfv(GL_FOG_COLOR, fogColor);

設定煙霧顏色(RGB),默認為黑色.
glFogi(GL_FOG_COORD_SRC,

GL_FRAGMENT_DEPTH);

深度值

GL_FRAGMENT_DEPTH:視口與煙霧的距離(默認值)

GL_FOG_COORD:使用glFogCoordf();設定煙霧坐標

 

混合方程式 簡介
Color=blendFactor*in + (1-blendFactor)*fog 混合方程式
blendFactor 混合因子
in 輸入顏色
fog 煙霧顏色
Color 輸出顏色

 

混合因子方程式 簡介
GL_LINEAR 線性混合

blendFactor=(end-depth)/(end-start)

GL_EXP 指數混合(默認值)

blendFactor= EXP (e, -density*depth)

GL_EXP2 二次指數指數混合

blendFactor= EXP(EXP (e, -density*depth),2)

 

評論