Оглавление Дополнительное чтение Учебник «Компьютерная графика» Рекурсия и фракталы 
Закраска Фонга

Закраска методом Гуро

Если при построении полигональной поверхности для каждой грани используется по одной нормали, то модель освещения создает изображение, состоящее из отдельных многоугольников (рис. 25.1a).

рис. 25.1

Методом Гуро можно получить сглаженное изображение. Для того чтобы изобразить объект методом построчного сканирования, нужно в соответствии с моделью освещения рассчитать интенсивность каждого пиксела вдоль сканирующей строки. Нормали к поверхности аппроксимируются в вершинах многоугольников. Однако сканирующая строка не обязательно проходит через вершины многоугольника (рис. 25.2). При закраске Гуро сначала определяется интенсивность вершин многоугольника, а затем с помощью билинейной интерполяции вычисляется интенсивность каждого пиксела на сканирующей строке.

рис. 25.2

Рассмотрим, например, участок полигональной поверхности на рис. 25.2. Значение интенсивности в точке P определяется линейной интерполяцией интенсивности в точках Q и R. Для получения интенсивности в точке Q — пересечении ребра многоугольника со сканирующей строкой — нужно линейной интерполяцией интенсивностей A и B найти IQ = uIA + (1 - u)IB, 0 <= u <= 1, где u = AQ/AB. Аналогично для получения интенсивности R линейно интерполируются интенсивности в вершинах B и C, то есть IR = wIB + (1 - w)Ic, 0 <= w <= 1, где w = BR/BC. Наконец, линейной интерполяцией по строке между Q и R находится интенсивность Р, то есть IP = tIQ + (1 - t)IR, 0 <= w <= 1, где t = QP/QR.

Значения интенсивности вдоль сканирующей строки можно вычислять инкрементально. Для двух пикселов в t1 и t2 на сканирующей строке
IP2 = t2IQ + (1 - t2)IR
IP1 = t1IQ + (1 - t1)IR.

Вычитая, получим, что вдоль строки
IP2 = IP1 + (IQ - IR)(t2 - t1) = IP1 + DIDt.

На рис. 25.1b показан результат применения закраски Гуро к полигональной аппроксимации лица, изображенного на рис. 25.1a. Видно, что качество изображения намного улучшилось, но при внимательном рассмотрении на рис. 25.1b заметно проявление эффекта полос Маха, например на скулах, вокруг глаз и на подбородке. Это происходит потому, что такой метод интерполяции обеспечивает лишь непрерывность значений интенсивности вдоль границ многоугольников, но не обеспечивает непрерывности изменения интенсивности. Обратите внимание также на то, что контуры лица, например глаз и носа, — многоугольники.

Еще одна проблема метода Гуро иллюстрируется на рис. 25.3a. Если нормали к вершинам B, C, D вычислить усреднением нормалей к многоугольникам, то они будут одинаково ориентированы, то есть интенсивность в этих точках будет равной. При линейной интерполяции от B до D значение интенсивности получится постоянным, и поверхность на данном участке будет выглядеть плоской.

рис. 25.3

Для изображения плавного перехода в B, C и D необходимы дополнительные многоугольники (рис. 25.3b). Если же нужно сохранить резкие складки, то для предотвращения сглаживания требуется выборочное усреднение нормалей к поверхности. В примере, показанном на рис. 25.3c, nB1 вычисляется только для одной грани справа от B, аналогично получается nD1 и nD2. В то же время nC вычисляется как среднее для граней слева и справа от C. В этом случае в B и D получается острое ребро, а в C — плавный переход, как видно, например, на губах на рис. 25.1b.

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

Скачать Скачать Stratum-проект «Закраска методом Гуро» [guro.spj, 16 Кб]
Рекурсия и фракталы Закраска Фонга