Введение в программирование трехмерных игр с DX9

       

Пример приложения: туман


Одна из тем, которым мы к сожалению не можем посвятить целую главу— туман в Direct3D. Эффект тумана добавляет сцене новый уровень реализма и может использоваться для имитации различных погодных условий. Кроме того, туман может скрыть визуальные артефакты, возникающие на дальнем плане.

Хотя мы и не можем уделить этой теме то внимание, которого она заслуживает, здесь мы приведем краткий пример реализации тумана. Мы не будем вдаваться в детали, но покажем и исследуем код Direct3D, который является интуитивно понятным.

Туман в Direct3D является частью фиксированного конвейера функций и управляется через режимы визуализации. Приведенный ниже файл эффекта устанавливает все необходимые режимы для вершинного тумана.

ПРИМЕЧАНИЕ

Direct3D также поддерживает пиксельный туман (также называемый табличным туманом), который является более точным, чем вершинный туман.

// // Файл: fog.txt // Описание: Файл эффекта, устанавливающий режимы визуализации // для линейного вершинного тумана // technique Fog { pass P0 { // // Устанавливаем различные режимы визуализации //

pixelshader = null; vertexshader = null; fvf = XYZ | Normal; Lighting = true; NormalizeNormals = true; SpecularEnable = false;

// // Режимы тумана //

FogVertexMode = LINEAR; // Линейная функция тумана FogStart = 50.0f; // Туман начинается в // 50 единицах от камеры. FogEnd = 300.0f; // Туман заканчивается в // 300 единицах от камеры FogColor = 0x00CCCCCC; // Туман серого цвета FogEnable = true; // Разрешить вершинный туман } }

Как видите, линейный вершинный туман управляется через пять простых режимов визуализации:

FogVertexMode — Задает функцию тумана, которая будет использоваться для вершинного тумана. Функция тумана определяет как изменяется плотность тумана с увеличением расстояния до камеры, поскольку естественно, что туман менее плотный возле камеры и становится более плотным по мере увеличения расстояния. Можно использовать значения LINEAR, EXP и EXP2. Эти функции определены следующим образом:

Функция тумана LINEAR:

Содержание раздела