Опубликован: 08.07.2007 | Доступ: свободный | Студентов: 1432 / 183 | Оценка: 4.43 / 4.02 | Длительность: 13:47:00
Специальности: Программист
Лекция 4:

Полупрозрачность. Цветовой ключ. Буфер трафарета

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >

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


Полупрозрачность можно использовать не только на цветных примитивах. Ниже показан пример полупрозрачного треугольника на фоне квадрата, покрытого текстурой.

Последовательность вывода примитивов должна быть следующей:

  1. Вначале выводится квадрат с текстурой, при этом полупрозрачность выключена;
  2. Включается режим полупрозрачности с нужными коэффициентами смешивания;
  3. Выводится цветной треугольник поверх квадрата.

Информация о полупрозрачности пикселей может содержаться и в самой текстуре. В этом случае для альфа составляющей отводится, как правило, такое же количество бит, что и под каждый из цветовых каналов. Наиболее распространенный формат представления изображения с альфа-каналом это 32 битные изображения, где на каждый канал отводится по 8 бит. Для создания полупрозрачной текстуры можно воспользоваться утилитой DirectX Texture Tool, которая поставляется совместно с DirectX SDK. Сам альфа-канал можно создать в виде изображения в оттенках серого цвета, в котором абсолютно черные пиксели будут соответствовать полной прозрачности, а белые пиксели – полной непрозрачности.

По умолчанию если текстура содержит альфа канал, то значение альфа составляющей берется из текстуры. Если же альфа канал не присутствует в текстуре, то значение альфа составляющей будет получено из вершины примитива. Тем не менее, можно явно указать "источник" альфа канала:

// вычисление альфа значения из текстуры 
device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE );
device->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );

// вычисление альфа значения из вершины примитива
device->SetTextureStageState( 0, D3DTSS_ALPHAARG1, D3DTA_DIFFUSE );
device->SetTextureStageState( 0, D3DTSS_ALPHAOP, D3DTOP_SELECTARG1 );

Ниже приведен пример вывода полупрозрачной текстуры.




Текстура (RGB канал) Альфа канал Результат

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

Ниже приведен пример вывода спрайтов с помощью текстур, содержащих альфа канал.










Исходное изображение Альфа канал Вывод на текстуру

В некотором смысле, альфа канал здесь используется в качестве маски вывода, при помощи которой происходит "отбрасывание" ненужных (фоновых) пикселей.

< Лекция 3 || Лекция 4: 12345 || Лекция 5 >