Наложение текстур (Direct3D 9)
Direct3D может накладывать на примитивы до восьми текстур за один проход. Использование множественного наложения текстур способно значительно увеличить частоту кадров приложения Direct3D. Приложения используют множественное наложение текстур для нанесения текстур, теней, зеркального освещения, рассеянного освещения и других специальных эффектов за один проход.
Чтобы использовать наложение текстур, приложению необходимо сначала проверить, поддерживает ли оно оборудованием пользователя. Эти сведения находятся в элементе TextureCaps структуры D3DCAPS9 . Дополнительные сведения о том, как запрашивать оборудование пользователя для наложения текстур, см. в разделе IDirect3DDevice9::GetDeviceCaps.
Этапы текстуры и каскад смешивания текстур
Direct3D поддерживает однопроходное наложение нескольких текстур посредством использования шагов текстурирования. Шаг текстурирования получает два аргумента и выполняет с ними операцию наложения, передавая результат для дальнейшей обработки или растеризации. Шаг текстурирования можно изобразить, как показано на следующем рисунке.
Как показано на схеме выше, на шаге текстурирования происходит наложение двух аргументов с помощью определенного оператора. Среди типичных операций — простая модуляция или добавления цветовых или альфа-компонентов аргументов. При этом поддерживается более двух десятков операций. Аргументами для шага текстурирования могут являться связанные текстуры, обработанный цвет или альфа-канал (обработка происходит во время заливки Гуро), произвольный цвет и альфа-канал или результат предыдущего шага текстурирования. Дополнительные сведения см. в разделе Операции смешения текстур и аргументы (Direct3D 9).
Примечание
Direct3D отличает наложение цветов от альфа-наложения. Приложения задают операции и аргументы наложения цвета и альфа-канала по отдельности, и результаты этих параметров не зависят друг от друга.
Сочетание аргументов и операций, производимых в ходе различных этапов наложения, определяет простой язык наложения на основе потока. Результаты одного этапа перетекают на другой, потом на следующий и т. д. Концепцию перетекания результатов из одного этапа в другой перед конечной растеризацией на многоугольнике часто называют каскадом наложения текстур. На следующей схеме показано, как отдельные шаги текстурирования составляют каскад наложения текстур.
Каждый шаг на устройстве имеет индекс с отчетом от нуля Direct3D поддерживает до восьми этапов наложения, однако следует всегда проверять возможности устройства, чтобы определить, сколько этапов поддерживает именно оно. Первый этап наложения имеет индекс 0, второй — 1 и т. д., вплоть до 7. Система накладывает этапы в порядке возрастания индекса.
Используйте только необходимое количество этапов; по умолчанию неиспользуемые этапы отключаются. Поэтому если приложение использует только первые два этапа, необходимо настроить операции и аргументы только для этапа 0 и 1. Система обрабатывает эти два этапа и игнорирует отключенные этапы.
Примечание
Если количество этапов в вашем приложении меняется в зависимости от ситуации, например если для некоторых объектов используется четыре этапа, а для других — только два, не нужно явно отключать все ранее использованные этапы. Можно отключить операцию цвета для первого неиспользуемого этапа, тогда все этапы с более высоким индексом применены не будут. Другой вариант — полностью отключить сопоставление текстур, задав для операции цвета для первого этапа текстуры (этапа 0) значение D3DTOP_DISABLE. Третий вариант заключается в том, что этап текстуры D3DTSS_COLORARG1 равен D3DTA_TEXTURE и указатель текстуры для этапа имеет значение NULL, этот этап и все этапы после него не обрабатываются.
Дополнительные сведения содержатся в следующих разделах.
- Операции и аргументы смешения текстур (Direct3D 9)
- Назначение текущих текстур (Direct3D 9)
- Создание этапов смешивания (Direct3D 9)
- Наложение альфа-текстур (Direct3D 9)
- Многопроходное наложение текстур (Direct3D 9)
- Сопоставление света с текстурами (Direct3D 9)
Связанные темы