- •2. Построение каркасного изображения
- •2.1. Изображение шара
- •3.2. Перспективная проекция
- •5. Модели закрашивания
- •5.1. Геометрические составляющие для нахождения отраженного света
- •5.2. Вычисления диффузионной составляющей
- •5.3. Зеркальное отражение
- •5.6. Комбинирование компонентов освещения
- •5.4. Повышение эффективности с помощью «промежуточного вектора».
- •5.5. Фоновые источники и фоновые отражения
- •5.7. Добавление цвета
- •6. Растровая развертка многоугольников
- •6.1.Использование списка вершин и когерентности сканирующих строк
- •6.2.Пересечения вершин (особый случай)
- •7. Алгоритм удаления невидимых поверхностей (алгоритм z-буфера)
- •Литература
5.7. Добавление цвета
Нетрудно расширить рассматриваемую модель закраски на случай отражения цветного освещения от цветных поверхностей. Вновь более общая модель является аппроксимацией, порожденной стремлением к простоте, однако она дает приемлемые результаты и вполне работоспособна.
Свет любого цвета может быть синтезирован путем сложения определенных количеств красного, зеленого и синего цветов. При работе с цветными источниками и цветными поверхностями мы вычисляем каждый компонент цвета отдельно и затем просто складываем их, чтобы окончательный цвет отраженного света. Тогда для вычисления красного, зеленого и синего компонентов отраженного света необходимо трижды применить уравнение (5.5):
(5.7)
(Величины lambert и phong заданы уравнением (5.6).)
Отметим, что мы предполагаем наличие у источника света трех «типов» цвета:
ambient=(
)(фоновый),
diffuse=(
)(диффузный),
specular=(
)(зеркальный).
Обычно цвета диффузного и зеркального освещения одинаковы. Кроме того, отметим, что переменные lambert и phong не зависит от того, компонент какого цвета вычисляется, так что их нужно вычислить один раз. Развивая этот подход, следует определить девять коэффициентов отражения:
ambieht reflection
coefficients:
( коэффициенты фонового отражения);
diffuse reflection
coefficients:
( коэффициенты диффузного отражения);
specular reflection
coefficients:
(
коэффициенты диффузного отражения).
Коэффициенты фонового и диффузного отражения определяются цветом самой поверхности. Под <<цветом поверхности>> мы имеем в виду тот цвет, который отражается от нее при освещении ее белым светом. Поэтому поверхность является красной, если она выглядит красной при освещении ее белым цветом. Если же поверхность освещается каким-либо другим цветом, то она может продемонстрировать совершенно иной цвет. Приводимые ниже примеры иллюстрируют эту относительность цвета.
6. Растровая развертка многоугольников
6.1.Использование списка вершин и когерентности сканирующих строк
Алгоритм развертки, описанный ниже, работает не с буфером регенерации, а со списком вершин многоугольника. На рис. 6.1, который иллюстрирует процесс сканирования многоугольника, показаны многоугольник и одна сканирующая строка, проходящая через него. Необходимо определить, какие пэлы этой строки находятся внутри многоугольника (в нашем случае 2-4 и 9-13), и присвоить им соответствующие значения. Повторяя данный процесс для каждой сканирующей строки, пересекающей многоугольник, мы преобразуем в растровую форму весь многоугольник.
Простым способом выделения пикселей сканирующей строки, попадающих внутрь многоугольника, является поочередная проверка всех пикселей. Однако такой процесс неэффективен, поскольку последовательность соседних пикселей обычно принадлежит многоугольнику. Это наблюдение основывается на понятии пространственной когерентности: при перемещении от пикселя к пикселю или от одной сканирующей строки к следующей рассматриваемый многоугольник в большинстве случаев остается постоянным. Такая когерентность, безусловно, полезна, так как можно искать не только те пиксели, в которых когерентность нарушается. В рассматриваемом случае мы имеем когерентность сканирующих строк; ниже мы будем пользоваться также когерентностью ребер.
На сканирующей строке 8 (рис. 6.1) внутри многоугольника находятся две полосы пикселей, которые можно закрасить с помощью трехшаговой процедуры:
1. Найти пересечения сканирующей строки со всеми ребрами многоугольника.
2. Упорядочить точки пересечений по возрастанию координаты x.
3. Раскрасить все пиксели между парами точек пересечения.
Для рис. 6.1. в упорядоченном списке x-координат точек пересечения будут числа (2,4,9,13). Поэтому закрашиваются все пиксели в интервалах 2-4 и 9-13.
На первом шаге производятся простые вычисления пересечений каждой сканирующей строки с каждым ребром многоугольника, пересекающим эту строку. Горизонтальные ребра не могут пересекать сканирующие строки и поэтому не рассматриваются. Следующие два шага процесса – сортировка и закраска,- по-видимому, также просты для выполнения.
