Вот вышла вторая статья по теории трехмерной графики.
Сегодня мы научимся делать туман и разберемся, как там все происходит.
Для начала надо сказать что туман бывает трех видов: пиксельный, вершинный и объемный, но о нем в других уроках т.к этот туман– дело избранных видеокарт.
Ниже следуют два исходных кода для разных видов тумана.
Пиксельный туман
void PixelFog(void)
{
float Start = 10.0f; // начало тумана(для linear)
float End = 20.0f; // конец тумана(для linear)
float Density = 0.33f; // густота - для exponential
DWORD Color = 0xFFFFFF; // Цвет - белый
DWORD Mode = D3DFOG_LINEAR; // Вид
g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE); // использовать туман
g_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color); // Цвет тумана
Вершинный туман
void SetupVertexFog(BOOL UseRange)
{
float Start = 10.0f; // начало тумана(для linear)
float End = 10.0f; // конец тумана(для linear)
float Density = 0.33f; // густота - для exponential
DWORD Color = 0xFFFFFF; // Цвет - белый
DWORD Mode = D3DFOG_LINEAR; // Вид
g_pDevice->SetRenderState(D3DRS_FOGENABLE, TRUE); // Использовать туман
g_pDevice->SetRenderState(D3DRS_FOGCOLOR, Color); // Цвет тумана
if(UseRange) //использовать туман по расстоянию
g_pDevice->SetRenderState(D3DRS_RANGEFOGENABLE, TRUE);
}
Формулы тумана
Линейный туман ( D3DFOG_LINEAR )
Для этого вида нужно задать начало и конец. При чем на конечном расстоянии будет расположена плоскость, за которой ни чего не будет видно(используется как правило в старых играх).
Экспоненциальный туман ( D3DFOG_EXP, D3DFOG_EXP2 )
Для этого тумана важна не дистанция, а плотность, которая колеблется от 0.0 до 1.0.
Да и кстати надо сказать, что этот туман более красив пример его можете наблюдать в игре ниже приведен скриншот.
Всем спасибо, надеюсь всем понятно, если есть проблемы пишите на aivle1@yandex.ru