Оглавление Дополнительное чтение Учебник «Компьютерная графика» Лекция 24. Зеркальное отражение Лекция 26. Модели цвета

Часть III / Лекция 25. Аппроксимация света на модели Фонга

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

Модель Фонга

Is = Il * w (q, l) * cosna, где
Is — интенсивность света, попадающего в глаз наблюдателя,
Il — интенсивность падающего луча,
w — коэффициент отражения, который находится из кривой отражения и зависит от угла падения q и длины волны l,
cosna — характеристика материала поверхности,
a — угол, образованный лучами отражения и наблюдения,
n — узость освещающего луча.

Общая модель закраски

На рис. 25.1 мы видим тело, как бы составленное из граней. По формулам из предыдущей лекции можно рассчитать освещенность для каждой точки этого тела. Но наблюдателю будут видны явно выраженные стыки поверхностей, поэтому для вуалирования переходов освещенности между этими поверхностями и проводят аппроксимацию (то есть сглаживание).

рис. 25.1

Закраска фигуры по Фонгу. Вуалирование граней

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

На рис. 25.2 (а также на рис. 25.3) изображены четыре плоскости, спроецированные на экран монитора. Горизонтальная штрих-линия представляет собой горизонтальный ряд пикселов, который строится лучом ЭЛТ.

рис. 25.2

Рассмотрим метод Фонга, суть которого состоит в апроксимации нормалей, на примере.

  1. Пусть нам известны уравнения плоскостей для трех многоугольников, и сходятся они в одной вершине. Три плоскости собираются в вершине V. Усредняем нормаль в ней:
    nv = (a1 + a2 + a3)i + (b1 + b2 + b3)j + (c1 + c2 + c3)k
    P0: z - 1 = 0;
    P1: -y + z - 2 = 0;
    P2: -x + z - 2 = 0.
    nv = -i - j + 3k — усредненная нормаль в точке n (используется для вычисления интенсивности пиксела).
    |n| = ((-1)2 + (-1)2 + 32)0.5 = 110.5 — абсолютная величина нормали.
    е = nv / |n| = -0.3i - 0.3j + 0.9k — единичная (нормированная) нормаль.
  2. Вычисляем нормаль в каждом пикселе строки. Для закраски необходимы векторы нормали в точках A, B и C. Аппроксимируем их усреднением нормалей к окружающим плоскостям. Для того, чтобы изобразить объект методом построчного сканирования, нужно в соответствии с моделью освещения рассчитывать интенсивность каждого пиксела вдоль сканирующей строки. Сначала определяется интенсивность вершин многоугольника (A, B и C), а затем с помощью интерполяции вычисляется интенсивность каждого пиксела на сканирующей строке.

    рис. 25.3

    Нормаль в точке Q находится линейной интерполяцией между А и В:
    nQ = U * nA + (1 - U) * nB; 0 <= U <= 1; U = AQ/AB.

    Нормаль в точке R находится линейной интерполяцией между B и C:
    nR = w * nB + (1 - w) * nC; w = BR/BC.

    Нормаль в точке P находится линейной интерполяцией между Q и R:
    nP = t * nQ + (1 - t) * nR; 0 <= t <= 1; t = QP/QR.

Дополнительное чтение

Закраска Фонга

Дополнительное чтение

Прозрачность

Скачать Скачать Stratum-проект «Аппроксимация света на модели Фонга» [fong.spj, 19 Кб]
Лекция 24. Зеркальное отражени... Лекция 26. Модели цвета