русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

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


Дата добавления: 2014-11-28; просмотров: 1615; Нарушение авторских прав


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

При закраске Фонга аппроксимация кривизны поверхности производится сначала в вершинах многоугольников путем аппроксимации нормали в вершине (см. главу 3.3). После этого билинейной интерполяцией вычисляется нормаль в каждом пикселе. Например, снова обращаясь к рис. 3.17, получаем нормаль в Q линейной интерполяцией между А и В, в R - между В и С и, наконец, в Р - между Q и R. Таким образом:

(3.56)

(3.57)

(3.58)

 

где

u=AQ / AB, w=BR / BC, t=QP / QR (3.59)

Нормаль вдоль сканирующей строки опять можно выразить через приращение, т. е.

(3.60)

где индексы 1 и 2 указывают на расположение пикселов на строке.

Хотя метод Фонга устраняет большинство недостатков метода Гуро, он тоже основывается на линейной интерполяции. Поэтому в местах разрыва первой производной интенсивности заметен эффект полос Маха, хотя и не такой сильный, как при закраске Гуро. Од­нако, иногда этот эффект проявляется сильнее у метода Фонга, например, для сфер. Кроме того, оба ме­тода могут привести к ошибкам при изображении невыпуклых мно­гоугольников, например, таких, как на рис. 3.17. Первая сканирую­щая строка использует данные из вершин QRS, а вторая, лежащая ниже, берет также данные вершины Р. Это может нарушить непре­рывность закраски.

Рис. 3.17 - Нарушение непрерывности закраски для невыпуклого



многоугольника

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

 

3.9 Яркость и освещенность

Одним из факторов формирования изображения является яркость конкретной его точки. Термин «яркость» употребляется для обозначения двух разных понятий: яркость изображения и яркость сцены.

Яркость связана с потоком энергии, которая может быть измерена разными способами. Вместо яркости изображения вводят новый термин: освещенность изображения – это мощность световой энергии, падающей на единицу поверхности.

, (3.61)

где - мощность потока, – бесконечно малый участок поверхности.

При рассмотрении сцены яркость связана с потоком энергии, излучаемым поверхностью. Для замены неформального понятия “яркость сцены” вводится термин “энергетическая яркость поверхности. Она равна мощности энергии, излучаемой единицей площади поверхности внутри единичного телесного угла, не зависит от угла наблюдения, свойств поверхности и энергии падающего потока света.

 

3.10 Отсечение

Для определения пересечения отрезка с окном пересечения, необходимо знать как минимум следующее:

§ две точки отрезка – его начало и конец (Т1 и Т2);

§ последовательность вершин окна, в том порядке, в каком они составляют контур окна.

Здесь рассматриваются три алгоритма, которые использовались в процедуре отсечения:

Алгоритм обнаружения тривиальности отрезка.

Алгоритм отсечения для выпуклого окна.

Алгоритм отсечения для произвольного окна.

Рассмотрим эти алгоритмы по порядку.

На рис.3.18 показана плоская сцена и отсекающее окно регулярной формы. Окно задается левым, правым, верхним и нижним двумерными ребрами.

Рис. 3.18 – Двумерное отсекающее окно

 

Отрезок считается тривиально видимым (для произвольного окна), если его концевые точки Т1 и Т2 находятся внутри окна.

Отрезок тривиально невидим, если выполняется хотя бы одно из условий:

§ Координаты Y у точек Т1 и Т2 лежат выше самой верхней координаты окна по Y.

§ Координаты Y у точек Т1 и Т2 лежат ниже самой нижней координаты окна по Y.

§ Координаты X у точек Т1 и Т2 лежат левее самой левой координаты окна по X.

§ Координаты X у точек Т1 и Т2 лежат правее самой правой координаты окна по X.

Рассмотрим теперь алгоритм отсечения для выпуклого окна. Для этого нам необходимо ввести понятие пересечения двух отрезков.

Из линейной алгебры можно получить уравнение линии по двум точкам. Приравнивая полученные уравнения отрезков 1 и 2, и решая систему, получаем точку пересечения двух линий, если она есть. Затем, анализируя результат, узнаем, принадлежит ли эта точка пересечения отрезку 1 и отрезку 2? Если да, то найденная точка и есть точка пересечения двух отрезков, иначе отрезки не пересекаются.

Введем алгоритм (´), с помощью которого можно определить лежит ли точка внутри выпуклого окна.

Пусть все точки окна упорядочены по направлению обхода. Т.е. сторона окна является направленным вектором.

Тогда, если все векторные произведения вектор-стороны окна на вектор «от начала отрезка к точке» будут иметь один знак, то точка лежит в окне.

Знак векторного произведения зависит от стороны обхода окна.

Идея алгоритма (2).

Для всех отрезков выполняются следующие пункты:

1. Отрезок является тривиально видимый? Да – п.9 Нет – п.2.

2. Построить список точек пересечения отрезка со сторонами окна SP{Р1,…, Рn}, n - количество точек пересечения отрезка со сторонами окна.

3. Определить для точки Т1и Т2 лежат ли они в окне.

4. Если n=0 (пересечений с окном нет), то п.5. Иначе п.6.

5. Если Т1 лежит в окне, то рисуем невидимый отрезок иначе видимый. Далее п.9.

6. Нарисовать линию от точки Т1 до Р1 в зависимости от того, лежит точка Т1 в окне или нет (если лежит- стиль отрезка невидимый).

7. Цикл по i от 0 до n-1: Рисуем отрезки с точками Р(i) и Р(i+1) со сменой стиля отрезка в зависимости от того, находится ли точка Т1 в окне или нет. (Если Т1 в окне, то Т1Р1- невидимый отрезок, Р1Р2- видимый, Р1Р3 – невидимый и т.д.)

8. Нарисовать линию от точки Т2 до Рn в зависимости от того, лежит точка Т2 в окне или нет (если лежит- стиль отрезка невидимый).

9. Конец разбора отрезка Т1Т2.

Различие между двумя алгоритмами (отсечение выпуклым и невыпуклым окном) заключается лишь в способе определения лежит ли точка в объекте. Алгоритм (×) рассмотрен для выпуклого окна. Если окно невыпуклое, то оно разбивается на треугольники, а затем уже, для каждого треугольника применяется алгоритм (×). Если данный алгоритм выполнился для i-го треугольника, то точка лежит в невыпуклом окне и проверку вхождения точки в другие треугольники можно прекратить.

Алгоритм отсечения отрезков произвольным окном имеет ту же структуру, что и алгоритм (2), только в п.3. используется описанный выше принцип определения: находится ли точка в окне отсечения.

 

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

Рис. 3.19 - Стеклянный чайник, слева прозрачный на 10%,

в центре - на 50% и справа - на 90%

Интенсивность участка пересечения двух прозрачных тел определяется по формуле:

, (3.62)

где коэффициент прозрачности тела 1 и 2;

интенсивность объектов 1 и 2.

Перейдем теперь от интенсивности к цвету. Т.е. вместо интенсивности объекта будем рассматривать его цвет.

Цвет объекта состоит из трех компонент: [r, g, b]- красная (r), зеленая (g), синяя (b).

Будем вместо коэффициента прозрачности рассматривать степень прозрачности (ПР) тела. Измеряется ПР в %. Если ПР = 0, то тело абсолютно непрозрачное, при ПР = 1 – абсолютно прозрачное.

Тогда, с учетом этих обозначений, определим цвет участка пересечения двух тел со степенью прозрачности ПР1 и ПР2:

,(3.63)

где - результирующий вектор компонент цвета.

Первое слагаемое в (3.63) определяет, какая часть цвета 1-го объекта остается в результирующем цвете; второе слагаемое - какая часть цвета 2-го объекта участвует в результирующем цвете; на основе соотношения (3.63) и строится весь алгоритм определения результирующего цвета пересечения двух прозрачных тел:

1. Если объекты не пересекаются п.4, иначе п.2.

2. Определить область пересечения объектов

3. Определить цвет области пересечения по формуле (3.63)

4. Конец.

 

3.12 Тени

Алгоритмы затенения в случае точечных источников света идентичны алгоритмам удаления скрытых поверхностей!!! В алгоритме удаления скрытых поверхностей определяются поверхности, которые можно увидеть из точки зрения, а в алгоритме затенения выделяются поверхности, которые можно «увидеть» из источника света. Поверхности, видимые как из точки зрения, так и из источника света, являются освещенными. Поверхности видимые из точки зрения, но невидимые из источника света находятся в тени. При наличии нескольких распределенных источников света потребуется вычислять как тени, так и полутени.

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

Сложность вычислений зависят и от положения источника света. Легче всего, когда источник находится в бесконечности, и тени определяются с помощью ортогонального проецирования. Сложнее, если источник расположен на конечном расстоянии, но вне поля зрения – здесь необходима перспективная проекция. Самый трудный случай, когда источник находится в поле зрения. Тогда пространство необходимо делить на секторы и искать тени отдельно для каждого сектора.

Тени образуются двумя способами: это собственная тень и проекционная. Собственная тень получается, когда сам объект экранирует все грани от источника света, например, правая грань параллелепипеда на рис 3.20. При этом алгоритм затенения аналогичен алгоритму удаления нелицевых граней, если точку наблюдения совместить с источником света.

Рис 3.20 – Виды теней

 

Проекционная тень – один объект препятствует попаданию света на другой. Например, тень на горизонтальной плоскости на рис. 3.20. Чтобы найти такие тени, нужно построить проекции всех нелицевых граней на сцену. Центр проекции находится в источнике света. Точки пересечения проецируемой грани со всеми другими плоскостями образуют многоугольники, которые помечаются как теневые многоугольники и заносятся в структуру данных.

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

 

Рис. 3.21 - Клетка. Справа тень получена алгоритмом

построчного сканирования, слева - трассировкой лучей

 

Рис. 3.22 - Стеклянная ваза. Справа тень получена алгоритмом построчного сканирования, слева - трассировкой лучей

 

3.13 Текстура

В компьютерной графике текстурой называется детализация структуры поверхности. Текстура – это одномерное или двумерное изображение, которое имеет множество ассоциированных с ним параметров, определяющих, каким образом производится наложение изображения на поверхность.

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

Что такое текстура, говоря обычным языком? Представьте себе, что вы заказали что-то по почте. И вот вам пришла посылка, глядя на которую, вы сразу понимаете, что в ней (рис.3.23). Т.о., текстура – это изображение, наложенное на какую-либо поверхность.

 

Рис. 3.23 - Наложение текстуры на поверхность

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

 

3.14 Фактура

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

Рис. 3.24 - Пример наложения текстуры на модель яблока слева и пример наложения текстуры и фактуры одновременнона графин справа

 

Впервые метод для нанесения рисунка (узора) на поверхность предложил Кэтмул. Этот способ вытекает из его алгоритма разбиения для криволинейных поверхностей.

Главным при нанесении рисунка на поверхность является отображение, поэтому в данном случае задача сводится к преобразованию систем координат Если рисунок задан в фактурном пространстве в прямоугольной системе координат (u, w), а поверхность - в другой прямоугольной системе координат (q,j), то для нанесения рисунка на поверхность нужно найти или задать функцию отображения одного пространства на другое, т. е.

(3.64)

или

(3.65)

Обычно, хотя необязательно, предполагается, что функция отображения линейна:

, (3.66)

где коэффициенты A, B, C, D выводятся из соотношения между двумя точками в системах координат.

Рис. 3.25 - Отображение

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

Первый основан на алгоритме разбиения Кэтмула. Алгоритм Кзтмула разбивает кусок поверхности на фрагменты до тех пор, пока фрагмент не будет покрывать центр только одного пикселя. Затем интенсивность пикселя можно было бы найти по узору, который получен при отображении параметри­ческих значений центра фрагмента или пикселя в фактурное про­странство. Но такой метод поточечной выбор­ки приводит к сильному лестничному эффекту. Например, можно потерять значительную часть или даже весь узор, показанный на рис. 3.26, а, если все выбранные точки окажутся в “белых” обла­стях узора. Чтобы этого не случилось разбивается как участок поверхности, так и соответствующий узор. Когда найден фраг­мент, покрывающий центр только одного пикселя, усредненная ин­тенсивность соответствующего фрагмента узора используется для определения интенсивности пикселя.

В общем случае полученный фрагмент узора не обязательно прямоугольный. Когда он изображается на растровом устройстве, его интенсивность равна средней взвешенной интенсивности пиксе­ловфактуры на данном фрагменте. В качестве весовой функции бе­рется отношение площади пикселов фактуры, находящихся внутри фрагмента, к их полной площади. Таким образом, алгоритм разбиения Кэтмула начинает свою работу на куске поверхности в объектном пространстве и развивается в двух направлениях: в пространстве изображения и фактурном пространстве.

Одно из преимуществ алгоритма разбиения Кэтмула состоит в том, что не обязательно знать обратное преобразование из про­странства изображения в объектное пространство или глубину (зна­чение z) фрагмента в пространстве изображения. Однако есть и не­достатки: например, фрагмент может не совпадать с одним пикселем в пространстве изображения (рис. 3.26, а).

Часто глубина (зна­чение z) известна из алгоритма удаления невидимых поверхностей. Для того чтобы найти обратное преобразование, нужно сохранить трехмерное видовое преобразование и преобразование объектного пространства в пространство изображения до проецирования на плоскость картины. При этом в фактурное пространство перево­дится точная площадь, покрываемая пикселем в пространстве изо­бражения. Задача состоит в том, чтобы отобразить площадь пикселя из пространства изображения на поверхность в объектном про­странстве, а затем - в фактурное пространство.

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

 

Рис. 3.26 - Отображение фактуры с помощью разбиения куска

 

Рис. 3.27 - Пиксел изображения в фактурном пространстве

В рассмотренных методах рисунок наносится на гладкую поверхность, и она после этого остается гладкой. Для того чтобы поверхность казалась шероховатой, можно оцифровать фотографию нерегулярной фактуры и отобразить ее на поверхность. Однако при этом будет казаться, что неровности нарисованы на гладкой по­верхности. Дело в том, что в векторе нормали к настоящей шеро­ховатой поверхности и, следовательно, в направлении отражения есть небольшая случайная составляющая. На этой основе Блинн разработал метод возмущения нормали для построения не­ровных поверхностей.

В любой точке поверхности Q(u, w) частные производные по направлениям u и w, Qu и Qw, лежат в плоскости, касательной к поверхности в этой точке. Нормаль в ней определяется векторным произведением

n = Qu Ä Qw (3.67)

Необходимо построить новую поверхность, которая выглядит шерохова­той, внося в направлении нормали функцию возмущения Р(u, w). Таким образом, радиус-вектор точки на новой поверхности есть

(3.68)

Нормаль к возмущенной поверхности имеет вид

(3.69)

Частные производныеивыражаются формулами

(3.70)

(3.71)

Последним членом можно пренебречь, так как P (функция возмущения) очень мала. Поэтому

(3.72)

(3.73)

Возмущенная нормаль имеет вид

(3.74)

Первый член — нормаль n к исходной поверхности, а последний равен нулю, поэтому

, (3.75)

где два последних члена, приведенные к единичной длине, представ­ляют собой возмущение нормали к поверхности и создают соот­ветствующий эффект в модели освещения.

В качестве P можно использовать почти любую функцию, у ко­торой существуют частные производные. Если узор не определяется аналитически, то функция возмущения записывается как двумерная таблица цветов с индексами u, w. Промежуточные значения вычисляются билинейной интерполяцией табличных вели­чин, а производные Pu и Pw вычисляются методом конечных разно­стей.

Эффект шероховатости зависит от масштаба изображаемого объекта. Например, если размер объекта увеличится в два раза, то величина вектора нормали возрастет в четыре раза, а его возмущения - только в два. Это приводит к тому, что увеличен­ный объект кажется более гладким. Однако масштаб фактуры на перспективном изображении не зависит от перемещения объекта в пространстве по направлению к наблюдателю или от него. При изображении фактуры с помощью функции возмущения может появиться лестничный эффект, но если воспользоваться рас­смотренным выше способом усреднения по площади фактуры или методами устранения лестничного эффекта, основывающимися на предварительной фильтрации, то фактура может полностью сгла­диться. Показано,что необходимо рассчитывать изобра­жение с разрешением большим, чем у дисплея, а затем отфильтро­вать или усреднить его и вывести с более низким разрешением экрана.

Один из последних методов построения нерегулярностей осно­ван на фрактальных поверхностях. Фрактальная поверхность состо­ит из случайно заданных полигональных или биполиномиальных поверхностей. В компьютерной графике этот метод первым применили Карпентер, а также Фурнье и Фассел. С помощью фрактальных поверхностей изображались природные объекты — камни, деревья, облака, а также ландшафты. Этот метод основан на работе Мандельброта. Для того чтобы получить полигональную фрактальную поверх­ность, исходный многоугольник рекурсивно разбивается на фраг­менты, как показано на рис. 3.28.

Рис. 3.28 - Формирование фрактальной поверхности

Для этого можно, например, слу­чайным образом сместить центр и середины сторон многоугольни­ка, причем и исходный, и полученный многоугольники не обяза­тельно должны быть плоскими. Одно из преимуществ фрактальных поверхностей в том, что их можно разбивать “бесконечно” и получить любой уровень детали­зации. Он может зависеть от положения наблюдателя: чем ближе точка наблюдения, тем с большей степенью детализации изображается поверхность. Если наблюдатель находится далеко, объем вы­числений значительно сокращается. Фрактальная поверхность изображается с помощью любого подходящего алгоритма удаления невидимых поверхностей и любой модели освещения. Однако число разбиений возрастает со скоростью выше линейной, поэтому меж­ду количеством разбиений и уровнем детализации должен быть некоторый компромисс. Иначе потребуется слишком много вычислений.


КОНТРОЛЬНАЯ РАБОТА ПО КУРСУ

«КОМПЬЮТЕРНАЯ ГРАФИКА»

Контрольная работа состоит из трех заданий, в каждом задании 15 вариантов, номера которых выбираются по номеру варианта студента (N). Задания выполняются на языках программирования Pascal или С/C++ для платформ DOS или Windows и высылаются в виде архивированного (kgN.zip, kgN.rar) пакета файлов, который должен содержать:

ü файлы исходного кода и файлы проекта[1] (для каждого задания в отдельном каталоге: task1, task2, task3);

ü идентификационный файл (about.me), содержащий:

- ФИО и код студента;

- номер специальности;

- наименование системы программирования и версия;

- список каталогов и файлов, входящих в пакет, с описанием каждого;

- дополнительные комментарии;

ü файл отчета по проделанной работе (kgN.doc) в формате Word6.0/97.

 

Отчет должен содержать:

· Титульный лист с указанием наименования дисциплины и идентификационных данных автора.

· Цель работы.

· Раздел 13. Для каждого задания включить:

- постановка задачи;

- содержательное описание метода решения задачи с использованием математического аппарата;

- листинг исходного кода[2], который относится к методу решения задачи с подробными(!) комментариями;

- вывод;

· Раздел 4. Заключение

 




<== предыдущая лекция | следующая лекция ==>
СОДЕРЖАНИЕ | ЗАДАНИЕ 2. Трехмерные преобразования


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.372 сек.