Закраска полигональных сеток.
Существует 3 способа закраски объектов, заданных полигональными сетками:
Однотонная закраска
Вычисляется 1 уровень интенсивности, который используется для закраски всего многоугольника. При этом предполагается, что:
1) Источник света расположен в бесконечности ( на всей полигональной грани)
2) Наблюдатель находится в бесконечности ( на всей полигональной грани)
3) Многоугольник п.с. реальную моделируемую поверхность, а не является аппроксимацией криволинейной поверхности.
Если первое или второе условие неприемлемо, можно использовать усредненное значение , вычисленные в центре многоугольника.
Третье предположение тоже часто не выполняется, но оно оказывает большое влияние на результат: каждая из видимых граней аппроксимированной поверхности хорошо отличима от других, т.к. интенсивность каждой из этих граней отличается от интенсивности соседних граней (эффект полос Маха).
Интерполяция интенсивностей (метод Гуро)
Метод Гуро позволяет получать сглаженный объект на этапе визуализации, не внося изменения в геометрическую модель (полигональные сетки). Полосы Маха значительно уменьшаются.
Процесс закраски осуществляется в 4 этапа:
1) Вычисляются нормали к поверхностям.
2) Определяются нормали в вершинах путем усреднения нормалей по всем граням, которым принадлежит вершина.
Рис. 13.12
3) Используя нормали в вершинах и применяя произвольный метод закраски, вычисляются значения в вершинах.
4) Каждый многоугольник закрашивается путем линейной интерполяции значений в вершинах сначала вдоль каждого ребра, а затем между ребрами вдоль каждой сканирующей строки:
Рис. 13.13
Интерполяция вдоль ребер легко объединяется с алгоритмом удаления скрытых поверхностей, построенном на принципе построчного сканирования. Для всех ребер запоминается начальное , а также изменение при каждом единичном шаге по координате y. Заполнение видимого интервала на сканирующей строке производится путем интерполяции между значениями на двух ребрах, ограничивающих интервал. Для цветных объектов отдельно интерполируется каждая из компонент цвета.
Интерполяция векторов нормали (метод Фонга)
Закраска Фонга требует больших вычислительных затрат, но она позволяет разрешить многие проблемы метода Гуро. При закраске Гуро вдоль сканирующей строки интерполируется значение , а при закраске Фонга – вектор нормали. Затем он используется в модели освещения для вычисления . При этом достигается лучшая локальная аппроксимация кривизны поверхности, и получается более реалистичное изображение. Особенно правдоподобно выглядят зеркальные блики, которые в методе Гуро сильно размываются.
Этапы закраски:
1) Вычисляются нормали к поверхностям.
2) Определяются нормали в вершинах путем усреднения нормалей по всем граням, которым принадлежит вершина.
3) Для каждой точки сканирующей строки определяется вектор нормали путем линейной интерполяции значений N (сначала в вершинах, затем - между ребрами).
4) Для каждой точки сканирующей строки вычисляется значение интенсивности .
Метод Фонга приводит к более качественным результатам, т.к. аппроксимация нормали осуществляется в каждой точке. Полосы Маха практически исчезают.
Тени.
Изображение с построенными тенями выглядит гораздо реалистичнее, и, кроме того, тени очень важны для моделирования. Например, особо интересующий нас участок может оказаться невидимым из-за того, что он попадает в тень. А в строительстве, при разработке космических аппаратов тени влияют на расчет падающей солнечной энергии, обогрев и кондиционирование воздуха. Если положение наблюдателя и источника света совпадают, то теней не видно, но они появляются, когда наблюдатель перемещается в любую другую точку. Тень стоит из 2-ух частей: полутени и полной тени. Полная тень – центральная, темная, резко очерченная часть, а полутень – окружающая ее более светлая часть. Распределенные источники света создают как тень, так и полутень: в полной тени свет вообще отсутствует, а полутень освещается частью распределенного источника.
Точечные источники создают только полную тень. Из-за больших вычислительных затрат рассматривается только полная тень, образуемая точечным источником света.
Легче всего, когда источник находится в бесконечности, тогда тени определяются с помощью ортогонального проецирования. Если источник расположен на конечном расстоянии, то используется перспективная проекция.
Рассмотрим рисунок. В этом случае тени образуются двояко:
1) собственно тень на объекте;
2) проекционная тень.
Собственная тень получается тогда, когда сам объект препятствует попаданию света на некоторые его грани. Алгоритм затенения в этом случае идентичен алгоритму удаления скрытых поверхностей. В алгоритме удаления скрытых поверхностей определяются поверхности, которые можно увидеть из точки зрения, а в алгоритме затенения – поверхности, которые можно “увидеть” из источника света. Поверхности, видимые из источника света и из точки зрения, не лежат в тени. Поверхности, видимые из точки зрения, но невидимые из источника света, находятся в тени. Поэтому удобно использовать 1 алгоритм, последовательно применяя его к точке зрения и к каждому из точечных источников света.
Рис. 13.14
Если один объект препятствует попаданию света на другой, то получается проекционной тень (горизонтальная плоскость на рис.). Чтобы найти такие тени, надо построить проекции граней на сцену. Центр проекции – в источнике света. Т.о. находятся теневые многоугольники для всех граней и заносятся в структуру данных. Чтобы не вносить в нее слишком много многоугольников, можно проецировать контур каждого объекта, а не отдельные грани.
Для создания различных видов из разных точек зрения не надо вычислять тени заново, т.к. они зависят только от положения источника света и не зависят от положения наблюдателя.
Источник на бесконечности
Рис. 13.15
В случае бесконечно удаленного источника света мы предполагаем, что лучи света, приходящие к объекту, полностью параллельны. Это позволит нам решить уравнение проекции только раз и применять полученное решение ко всем вершинам объекта.
Общая постановка задачи:
Имея точку источника света и вершину объекта , мы хотим получить проекцию вершины объекта на плоскость z=o, т.е. точку тени .
Из подобных треугольников получаем:
(1.1)
Решая это уравнение относительно , получаем:
(1.2)
Если принять, что L это вектор из точки P к источнику света, то точку S можно выразить как:
(1.3)
Т.к. мы производим проекцию на плоскость z=0, то уравнение (1.3) можно переписать в следующем виде:
(1.4)
или
(1.5).
Решая (1.3) относительно и , получаем
(1.6)
или в матричной форме:
(1.7)
Теперь имея координаты точки P в мировом координатном пространстве, можно получить ее проекцию на плоскость z=0 просто путем умножения на матрицу
(1.8).
Локальный источник
Уравнение (1.6) для бесконечно удаленного источника света может быть обобщено для случая, когда источник света находится на конечном расстоянии от объекта. В этом случае нам понадобятся дополнительные вычисления на каждую вершину, т.к. каждая вершина имеет, в общем случае, свое собственное направление на источник света. Тем не менее, в этом случае мы тоже можем перенести большую часть вычислений в матрицу .
Если L это точка расположения источника света, то (1.3) принимает вид:
(1.9)
И снова нам необходимо произвести проекцию на плоскость z=0, тогда.
(1.10)
и
(1.11)
Если использовать гомогенизацию после преобразования, то (1.11) можно записать в виде матрицы:
(1.12).
Опять, имея координаты точки P в мировом координатном пространстве, можно записать:
(1.13)
После чего провести гомогенизацию точки S для получения проекции точки P на плоскость z=0.
Дата добавления: 2016-07-18; просмотров: 1960;