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

       

Прозрачный чайник



Рисунок 7.2. Прозрачный чайник


Как выполнить это? Поскольку мы растеризуем образующие чайник треугольники поверх изображения ящика, мы должны комбинировать цвета пикселей чайника с цветами пикселей ящика таким образом, чтобы ящик был виден сквозь чайник. Комбинирование значений рисуемых в данный момент пикселей (пиксели источника) со значениями ранее записанных пикселей (пиксели приемника) и называется смешиванием. Обратите внимание, что реализуемые с помощью смешивания эффекты не ограничиваются обычной иммитацией прозрачности стеклянных объектов. Мы можем указать ряд параметров, определяющих как будет выполняться смешивание. Эти параметры рассматриваются в разделе 7.2.

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


ПРАВИЛО Сперва рисуйте объекты, которые не используют смешивание. Затем отсортируйте объекты, которые используют смешивание, по расстоянию от камеры; наиболее эффективно эта операция выполняется, если объекты находятся в пространстве вида — в этом случае достаточно отсортировать их по значению координаты Z. После этого рисуйте использующие смешивание объекты начиная от самых дальних и заканчивая самыми близкими.


При смешивании значений двух пикселей используется следующая формула:

ИтоговыйПиксель = ПиксельИсточника 

 КоэффициентСмешиванияИсточника + ПиксельПриемника
 КоэффициентСмешиванияПриемника

Каждая из переменных в этой формуле является четырехмерным цветовым вектором (r, g, b, a), а символ

означает операцию перемножения компонент.

ИтоговыйПиксель — Пиксель, получаемый в результате смешивания.

ПиксельИсточника — Обрабатываемый в данный момент пиксель, который смешивается с пикселем из вторичного буфера.

КоэффициентСмешиванияИсточника — Значение в диапазоне [0, 1], определяющее какой процент пикселя источника участвует в смешивании.

Пиксель приемника — Пиксель, находящийся во вторичном буфере.

КоэффициентСмешиванияПриемника — Значение в диапазоне [0, 1], определяющее какой процент пикселя приемника участвует в смешивании.

Благодаря коэффициентам смешивания источника и приемника можно различными способами модифицировать исходные пиксели источника и приемника, что позволяет реализовать различные эффекты. В разделе 7.2 описаны предопределенные значения, которые можно использовать.

По умолчанию смешивание запрещено; чтобы разрешить его, присвойте режиму визуализации D3DRS_ALPHABLENDENABLE значение true:

Device->SetRenderState(D3DRS_ALPHABLENDENABLE, true);

СОВЕТ

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