КГ_4глава (1024110), страница 6
Текст из файла (страница 6)
Косинус угла нормали к грани с осью z равен отношению координаты; и длины радиус-вектора
Второй пример. Источник света располагается в бесконечности и не лежит на оси z. В этом случае существенным является способ задания направления на источник света. Если расположение источника света описывать так же, как и для камеры — двумя углами (ас и βc), то можно сделать поворот координат так, чтобы ось z была направлена на источник света, и применить формулы для первого примера. Иными словами, необходимо преобразовать координаты вектора нормали. Здесь можно использовать тот факт, что длина вектора при повороте не изменяется, поэтому достаточно вычислить координату zN в повернутой системе координат.
Если расположение источника света описывается вектором, направленным на источник света, то косинус угла с вектором нормали можно вычислить следующим образом. Вначале необходимо определить радиус-вектор, направленный на источник света. Обозначим его как S. Затем, для вычисления косинуса угла между радиус-векторами S и N воспользуемся формулами скалярного произведения векторов. Так как
а также
то получим
Очевидно, что для упрощения вычислений целесообразно использовать вектор S единичной длины; то есть |5] = 1.
Третий пример. Источник света располагается в конечной точке пространства с координатами (хс, ус, zc). Для определения косинуса угла с нормалью выполним сдвиг координат источника света так, чтобы вектор нормали в точке поверхности и вектор, направленный на источник света, выходили из общего центра. Выше мы уже рассматривали построение радиус-вектора нормали к треугольной грани путем сдвига (параллельного переноса) координат на (—х1 ,-y1,, -z1). Радиус-вектор, который направлен на источник света и который можно использовать для расчетов, будет иметь координаты (хс –х1, yс –y1, zс –z1). Затем уже можно вычислить искомый косинус угла через скалярное произведение радиус-векторов, как в предыдущем примере. Зеркальное отражение. Будем считать, что задан радиус-вектор S, направленный на источник света, а также известен радиус-вектор нормали N. Требуется найти косинус угла между отраженным лучом и направлением камеры. Вначале необходимо вычислить радиус-вектор отраженного луча. Обозначим его как R. Выполним некоторые геометрические построения, как показано на рис. 4.36.
Рис. 4.36. Векторы Ri, Si и Ni — единичной длины
Для решения нашей задачи вначале рассмотрим единичные векторы R1 , S1 и N1. Поскольку векторы нормали, падающего луча и отраженного луча находятся в одной плоскости, то можно записать R1 + S1 = N', где N' — это век» тор, соответствующий диагонали ромба и совпадающий по направлениюc нормалью. Длина вектора N' равна 2cos β. Так как вектор N' по направлению: совпадает с N1 то
Отсюда найдем единичный вектор отраженного луча:
Найдем cos θ. Это можно сделать, используя скалярное произведение векторов N и S:
Подставим это значение в выражение для R1:
Полагая, что искомый вектор отраженного луча будет иметь такую же длину, что и вектор падающего луча, то есть R = \S\R1 получим
Это решение в векторной форме. Запишем координаты вектора R.
Теперь осталось найти косинус угла между отраженным лучом и направлением камеры. Обозначим радиус-вектор, направленный на камеру, как К. Искомый косинус угла найдем, используя скалярное произведение векторов К и R:
Очевидно, что для упрощения вычислений целесообразно задавать векторы S,N и K единичной длины (тогда и R будет единичным).
Метод Гуро
Этот метод предназначен для создания иллюзии гладкой криволинейной поверхности, описанной в виде многогранников или полигональной сетки с плоскими гранями. Если каждая плоская грань имеет один постоянный цвет, определенный с учетом отражения, то различные цвета соседних граней очень заметны, и поверхность выглядит именно как многогранник. Казалось бы, этот дефект можно замаскировать за счет увеличения количества граней при аппроксимации поверхности. Но зрение человека имеет способность подчеркивать перепады яркости на границах смежных граней — такой эффект называется эффектом полос Маха. Поэтому для создания иллюзии гладкости нужно намного увеличить количество граней, что приводит к существенному замедлению визуализации— чем больше граней, тем меньше скорость рисования объектов.
Метод Гуро основывается на идее закрашивания каждой плоской грани не одним цветом, а плавно изменяющимися оттенками, вычисляемыми путем интерполяции цветов примыкающих граней. Закрашивание граней по методу Гуро осуществляется в четыре этапа.
□ Вычисляются нормали к каждой грани. _ . ., ..
v K Рис. 4.37. Нормаль
□ Определяются нормали в вершинах. Нор- в вершине маль в вершине определяется усреднением
нормалей примыкающих граней (рис. 4.37).
□ На основе нормалей в вершинах вычисляются значения интенсивностей в вершинах согласно выбранной модели отражения света.
П Закрашиваются полигоны граней цветом, соответствующим линейной интерполяции значений интенсивности в вершинах.
Вектор нормали в вершине (at) равен ■'
Определение интерполированных значений интенсивности отраженного света в каждой точке грани (и, следовательно, цвет каждого пиксела) удобно выполнять во время цикла заполнения полигона. Рассмотрим заполнение контура грани горизонталями в экранных координатах (рис. 4.38).
Рис. 4.38. Заполнение контура грани
Интерполированная интенсивность I в точке (X,Y) определяется исходя из пропорции
Значения интенсивностей I1 и I2 на концах горизонтального отрезка представляют собой интерполяцию интенсивности в вершинах:
Метод Фонга
Аналогичен методу Гуро, но при использовании метода Фонга для определения цвета в каждой точке интерполируются не интенсивности отраженного света, а векторы нормалей.
□ Определяются нормали к граням.
О По нормалям к граням определяются нормали в вершинах. В каждой точке закрашиваемой грани определяется интерполированный вектор нормали.
О По направлению векторов нормали определяется цвет точек грани в соответствии с выбранной моделью отражения света.
Рассмотрим, как можно получить вектор нормали в каждой точке грани. Для интерполяции будем оперировать векторами N'a, N'b и N'c, исходящими из центра координат плоскости проецирования и параллельными соответствующим нормалям Na, Nb и Nc в вершинах а, b и с (рис. 4.39).
Рис. 4.39. Интерполяция векторов нормалей Сначала найдем N'i и N'2:
где XNa, YNa, ZNa, XNh, YNb, ZNb, XNc, YNc и ZNc — координаты векторов N'a, N'b и N'c. Теперь найдем координаты вектора N':
'•'".£.
Вектор Nr параллелен вектору N для нормали в точке (X, Y), поэтому его можно использовать для расчета отражения света так же, как и вектор нормали N.
Метод Фонга сложнее, чем метод Гуро. Для каждой точки (пиксела) поверхности необходимо выполнять намного больше вычислительных операций. Тем не менее он дает значительно лучшие результаты, в особенности при имитации зеркальных поверхностей.
Общие черты и отличия методов Гуро и Фонга можно показать на примере цилиндрической поверхности, аппроксимированной многогранником (рис. 4.40). Пусть источник света находится позади нас. Проанализируем закрашивания боковых граней цилиндра.
Рис. 4.40. Отличия закрашивания Фонга и Гуро
На рис. 4.40 на закрашенной поверхности показаны черным цветом ребра граней — это сделано для иллюстрации особенностей закрашивания, на самом деле после закрашивания никакого черного каркаса не будет, и поверхность выглядит гладкой.
Основные отличия можно заметить для закрашивания передней грани. Она перпендикулярна направлению лучей света. Поэтому нормали в вершинах этой грани располагаются симметрично — они образовывают попарно равные по абсолютной величине углы с лучами света. Для метода Гуро это обуславливает одинаковые интенсивности в вершинах передней грани. А раз интенсивности одинаковые, то и для любой точки внутри этой грани интенсивность одинакова (для линейной интерполяции). Это обуславливает единый цвет закрашивания. Все точки передней грани имеют одинаковый цвет, что, очевидно, неправильно.
Метод Фонга дает правильное закрашивание. Если интерполировать векторы нормалей передней грани, то по центру будут интерполированные нормали, параллельные лучам света (рис. 4.41).
По методу Фонга центр передней грани будет светлее, чем края. Возможно, это не очень заметно на типографском отпечатке рисунка данной книги, однако это именно так.