煙霧(Fog)使遠距離的物體變暗,近距離的物體變得清晰.是遊戲中常用特效.OpenGL煙霧將每個像素煙霧色進行混合處理.
煙霧演示程式:下載
- 按+/-鍵移動煙霧距離
- 按ESC鍵重置聚煙霧
煙霧函式演示:
- glEnable(GL_FOG);
- GLfloat fogColor[] = { 0f, 0.0f, 0.0f };
- glFogfv(GL_FOG_COLOR, fogColor);
- glFogi(GL_FOG_MODE, GL_LINEAR);
- glFogi(GL_FOG_COORD_SRC,GL_FRAGMENT_DEPTH);
- glFogf(GL_FOG_START, start);
- glFogf(GL_FOG_END, end);
- glFogf(GL_FOG_DENSITY, 2f);
- Draw_Terrain();
- 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) |