Эффекты окружения: туман в C# + OpenGL
Что прочитать перед этим материалом
OpenGL шейдеры: Вторая часть. Шейдер в контексте OpenGL с GLSL без ФГК
Почти все существующие статьи по созданию тумана написаны под C++. Изучив разности синтаксиса C# OpenGL и C++ OpenGL, я догадался, как сделать туман в C# + OpenGL.

Сначала необходимо создать массив, хранящий в себе цвет “тумана”.
Ниже представлен готовый код:
Код:
float[] fogColor=new float[4] {0.5f, 0.5f, 0.5f, 1.0f}; // Цвет тумана
Для изменения цвета очистки экрана на цвет тумана воспользуйтесь следующим кодом:
Код:
Gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // Будем очищать экран, заполняя его цветом тумана.
Сразу после этого, необходимо прописать следующий код:
Код:
Gl.glEnable(Gl.GL_FOG); // Включает туман (GL_FOG)
Gl.glFogi(Gl.GL_FOG_MODE, Gl.GL_LINEAR);// Выбираем тип тумана
Gl.glFogfv(Gl.GL_FOG_COLOR, fogColor); // Устанавливаем цвет тумана
Gl.glFogf(Gl.GL_FOG_DENSITY, 0.35f); // Насколько густым будет туман
Gl.glHint(Gl.GL_FOG_HINT, Gl.GL_DONT_CARE); // Вспомогательная установка тумана
Gl.glFogf(Gl.GL_FOG_START, 1.0f); // Глубина, с которой начинается туман
Gl.glFogf(Gl.GL_FOG_END, 5.0f); // Глубина, где туман заканчивается.
glFogiможет быть представлен следующими видами тумана:
- Gl.GL_EXP - обычный туман, заполняющий весь экран;
- Gl.GL_EXP2 - затуманит весь экран, зато придает больше глубины всей сцене;
- Gl.GL_LINEAR - лучший режим прорисовки тумана.
Вот и всё!