Закраска Гуро При закрашивании Гуро (Gouraud shading) для каждого пиксела вычисляется отдельное значение цвета с. Для строки развертки при ys на рис. 8.22 цвет крайнего левого пикселя color]cfl определяется посредством линейной интерполяции цветов на верхнем и нижнем концах левого ребра полигона1. Для этой строки развертки «верхний» цвет равен colorv а «нижний» - color\, так что со1огш можно вычислить по формуле (вспомните уравнение (8.9)):

colorleft = lerp(colort> color4,/), (8.12)

где дробь

изменяется от 0 до 1 при изменении уг от уЫ1 до ук. Отметим, что равенство (8.12) подразумевает три вычисления, поскольку каждое значение цвета содержит компоненты красного, зеленого и синего цветов.

Подобным же образом вычисляется цвет со1огг|(,к - путем интерполяции цветов в верхнем и нижнем концах правого ребра. Затем плиточник заполняет строку развертки, линейно интерполируя между цветами со1ог|сЛ и со!огг1к1)1 для получения цвета пиксела х.

(8.13)

Для повышения эффективности заполнения этот цвет вычисляется в приращениях для каждого пиксела. То есть между цветами с(х + 1) и с(х) разность постоянна, так что с(х + 1) = с(х) +---. (8.14)

-""right - *lcft

Приращение вычисляется только один раз за пределами самого внутреннего цикла. Код при этом выглядит примерно так:

for (int у - ybott ; у <= ytop : у++)

// for each scan line

// для каждой строки развертки

{
find xleft and xright

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

Визуализация граней для усиления реалистичности

// нахОДИН Xlett И Xright

find colorleft and colorright II находим colorieft и colornght

Colonne - (COlornght - COlorieft ) / (xright - Xleft ):

for (int x - xieft . с - colorieft : x <= xnght : x++. c+-colonnc ) put с into the pixel at (x. y) II помещаем цвет с в пиксел (х, у)


⇐ Предыдущая| |Следующая ⇒