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




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



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



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


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

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


ПРАВИЛО


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


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

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

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

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

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

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




Содержание  Назад  Вперед