Шаг 73.
Основы компьютерной графики. Методы и алгоритмы трехмерной графики. Закрашивание поверхностей. Модели отражения света. Метод Фонга

    На этом шаге мы рассмотрим особенности этого метода.

    Этот метод аналогичен методу Гуро, но при использовании метода Фонга для определения цвета в каждой точке интерполируются не интенсивности отраженного света, а векторы нормалей.

    Рассмотрим, как можно получить вектор нормали в каждой точке грани. Для интерполяции будем оперировать векторами N'a, N'b, N'c, исходящими из центра координат плоскости проецирования и параллельными соответствующим нормалям Na, Nb и Nc в вершинах a, b и c (рисунок 1).


Рис.1. Интерполяция векторов нормалей

    Сначала найдем N'1 и N'2:

где XNa, YNa, ZNa, XNb, YNb, ZNb, XNc, YNc и ZNc - координаты векторов N'a, N'b и N'c. Теперь найдем координаты вектора N':

    Вектор N' параллелен вектору N для нормали в точке (X, Y), поэтому его можно использовать для расчета отражения света так же, как и вектор нормали N.

    Метод Фонга сложнее, чем метод Гуро. Для каждой точки (пикселя) поверхности необходимо выполнять намного больше вычислительных операций. Тем не менее, он дает значительно лучшие результаты, в особенности при имитации зеркальных поверхностей.

    Общие черты и отличия методов Гуро и Фонга можно показать на примере цилиндрической поверхности, аппроксимированной многогранником (рисунок 2).


Рис.2. Отличия закрашивания Фонга и Гуро

    Пусть источник света находится позади нас. Проанализируем закрашивания боковых граней цилиндра.

    На рисунке 2 на закрашенной поверхности показаны черным цветом ребра граней - это сделано для иллюстрации особенностей закрашивания, на самом деле после закрашивания никакого черного каркаса не будет, и поверхность выглядит гладкой.

    Основные отличия можно заметить для закрашивания передней грани. Она перпендикулярна направлению лучей света. Поэтому нормали в вершинах этой грани располагаются симметрично - они образовывают попарно равные по абсолютной величине углы с лучами света. Для метода Гуро это обуславливает одинаковые интенсивности в вершинах передней грани. А раз интенсивности одинаковые, то и для любой точки внутри этой грани интенсивность одинакова (для линейной интерполяции). Это обуславливает единый цвет закрашивания. Все точки передней грани имеют одинаковый цвет, что очевидно, неправильно.

    Метод Фонга дает правильное закрашивание. Если интерполировать векторы нормалей передней грани, то по центру будут интерполированные нормали, параллельные лучам света (рисунок 3).


Рис.3. Интерполяция нормалей дает более точный результат

    По методу Фонга центр передней грани будет светлее, чем края. Возможно, это не очень заметно на рисунке, однако это именно так.

    На следующем шаге мы рассмотрим преломление света.




Предыдущий шаг Содержание Следующий шаг