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 | < Назад | Оглавление | Далее > |