| netlib.narod.ru | < Назад | Оглавление | Далее > |
Одна из тем, которым мы к сожалению не можем посвятить целую главу — туман в 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: |
![]() |
Функция тумана EXP: |
![]() |
Функция тумана EXP2: |
![]() |
(d — это расстояние до камеры.)
FogStart — Отмечает стартовую глубину, начиная с которой объекты будут затуманиваться.
FogEnd — Отмечает конечную глубину, после которой затуманивание объектов прекращается.
FogColor — Значение типа DWORD или D3DCOLOR, задающее цвет тумана.
FogEnable — Укажите true, чтобы включить вершинный туман или false, чтобы запретить вершинный туман.
К любым объектам, которые визуализируются с использованием файла эффекта fog.txt будет применен эффект тумана. Благодаря этому мы можем контроллировать, какие объекты будут затуманены, а какие — нет. Это полезно для выборочного затенения областей. Например, обычно туман находится на улице, а внутри домов тумана нет. Также часто требуется скрывать в тумане только определенные части территории, а другие оставлять незатуманенными. На рис. 19.2 показано окно рассматриваемого в данном разделе примера Fog Effect.

Рис. 19.2. Окно программы Fog Effect. В этом примере мы используем линейную функцию тумана и режимы визуализации тумана задаются в файле эффекта
| netlib.narod.ru | < Назад | Оглавление | Далее > |