Помощь в написании студенческих работ
Антистрессовый сервис

Метод закраски по Гуро

КурсоваяПомощь в написанииУзнать стоимостьмоей работы

Таким образом, мы получили образ создаваемого объекта. Далее решается проблема видимости (или удаление невидимых поверхностей), которая заключается в следующем: объекты располагаются в виртуальном пространстве сцены на разном удалении от визуальной камеры. Наконец, все предварительные стадии завершены и настал черед самой трудоемкой с вычислительной точки зрения стадии рендеринга (прослеживание… Читать ещё >

Метод закраски по Гуро (реферат, курсовая, диплом, контрольная)

Таганрогский Технологический Институт Южного Федерального Университета Факультет Автоматизированной и Вычислительной Техники Курсовая работа По предмету: Компьютерная графика Метод закраски по Гуро Таганрог 2008

Цель работы

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

Теоретическая часть

Понятия «рендеринг» и «моделинг» — одни из более употребляемых терминов компьютерной графики. Render в переводе с английского языка означает формировать изображения, визуалировать. Основной задачей любой программы рендеринга является вычисление освещенности и цвета произвольной точки трехмерной сцены. Задача эта очень непроста. Вычислительные методы компьютерной графики проделали довольно длинный путь эволюционного развития, прежде чем достигли современного уровня фотореалистичности синтезированных на компьютере изображений. Но прежде чем говорить о моделях освещенности, необходимо вкратце осветить физические основы самого процесса визуализации. Теоретические основы рендеринга заложены более 300 лет назад Исааком Ньютоном, предложившим корпусулярную теорию света и обосновавшем с помощью этой теории такие ключевые для рендеринга явления, как отражения (reflection), преломление (refraction), рассеяние (diffusion, scattering). Другим «краеугольным камнем» в рендеринге является закон сохранения энергии (в данном случае энергии света). По сути дела рендерингаэто попытка решения (с разной степенью точности) некоего уравнения, описывающего распространение света в трехмерной сцене, причем уравнение это учитывает только корпускулярные свойства света. Уравнения так и называются — уравнение рендеринга. В математическом представлении оно выглядит так:

L0(x,) = Lc(x,) + ,Li(x,)()d

где L0 — свет, излучаемый поверхностью в точке х в направлении вектора w, Le — собственные «излучательные способности» поверхности в той же точке и в том же направлении, а выражение под знаком интеграла — это бесконечная сумма излучений, пришедших в точку поверхностей из пространственной полусферы и отраженных поверхностью в соответствии с ее «отражательной способностью», описываемой с помощью функции fr — функция эта настолько важна, что получила в теории рендеринга собственное название — bidirectional reflectance distribution function (BRDF), что в переводе означает «двунаправленная функция распределения отражений». BRDF описывает отражательные оптические свойства поверхности, но, будучи математической абстракцией, не имеет физических измерений. В словесной интерпретации уравнение рендеринга выглядит так: освещенность в точке поверхности складывается из энергии лучей, пришедших напрямую от источника света и энергии лучей от тех же источников, но претерпевших отражения (бесконечное число отражений) от других поверхностей в трехмерной сцене. Плюс собственные свойства поверхности, как источника света в- 3Dпрограммах (их рендерах) последнего поколения источником света может быть не только специальный объект (как правило, или совсем не имеющий, или имеющий очень простую «геометрию»), но вообще любой объект в сцене.

визуализация гуро закраска графика

X2D = X3D — Ч

X3D Y2D = Y3D - Ч Y3D

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

Метод Гуро

Метод назван по имени его разработчика, француза Генри Гуро. Если при построении полигональной поверхности для каждой грани используется по одной нормали, то модель освещения создает изображение, состоящее из отдельных многоугольников. Методом Гуро можно получить сглаженное изображение.

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

Метод Гуро — это метод, согласно которому цвет примитива реально рассчитывается лишь в вершинах, а затем линейно интерполируется по его поверхности. Это значительно снижает вычислительные затраты и не менее Закрашивание граней по методу Гуро осуществляется в четыре этапа.

· Вычисляются нормали к каждой грани.

· Определяются нормали в вершинах. Нормаль в вершине определяется усреднением нормалей примыкающих границей.

· На основе нормалей в вершинах вычисляются значения интенсивностей в вершинах согласно выбранной модели отражения света.

· Закрашиваются полигоны граней цветом, соответствующим линейной интерполяции значений интенсивности в вершинах.

Вектор нормали в вершине а равен

Na=(N1+N2+N3)/3

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

Заполнение контура грани

Интерполированная интенсивность I в точке (X,Y) определяется исходя из пропорции

(I-I1)/(X-X1) = (I2-I1)/(X2-X1).

Отсюда

I = I1+(I2-I1) (X-X1)/ (X2-X1).

Значения интенсивностей I2 и I1 на концах горизонтального отрезка представляют собой интерполяцию интенсивности в вершинах:

(I1-Ib) / (Y-Yb) = (Ic-Ib) / (Yc-Yb) (I2-Ib) / (Y-Yb) = (Ia-Ib) / (Ya-Yb) Или I1= Ib+ (Ic-Ib) (Y-Yb) / (Yc-Yb) I2= Ib+(Ia-Ib) (Y-Yb) / (Ya-Yb).

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

Рис. 11.10. Интерполяция закраски.

Рассмотрим, например, участок полигональной поверхности на рис. 11.10. Значение интенсивности в точке P определяется линейной интерполяцией интенсивности в точках Q и R. Для получения интенсивности в точке Q — пересечении ребра многоугольника со сканирующей строкой — нужно линейной интерполяцией интенсивностей A и B найти где u=AQ/AB. Аналогично для получения интенсивности R линейно интерполируются интенсивности в вершинах B и C, т. е.

где w=BR/BC. Наконец, линейной интерполяцией по строке между Q и R находится интенсивность P, т. е.

где t=QP/QR.

Значения интенсивности вдоль сканирующей строки можно вычислять инкрементально. Для двух пикселов в t1 и t2 на сканирующей строке Вычитая, получим, что вдоль строки На рис. 11.9, b показан результат применения закраски Гуро к полигональной аппроксимации лица, изображенного на рис. 11.9, а. Видно, что качество изображения намного улучшилось, но при внимательном рассмотрении на рис. 11.9, b заметно проявление эффекта полос Маха, например на скулах, вокруг глаз и на подбородке. Это происходит потому, что такой метод интерполяции обеспечивает лишь непрерывность значений интенсивности вдоль границ многоугольников, но не обеспечивает непрерывности изменения интенсивности. Обратите внимание также на то, что контуры лица, например глаз и носа, — многоугольники.

Закраска Гуро лучше всего выглядит в сочетании с простой моделью с диффузным отражением, описываемой уравнениями освещения (11.1) или (11.2), так как форма бликов при зеркальном отражении сильно зависит от выбора многоугольников, представляющих объект или поверхность.

О методе Гуро и его недостатках

Итак, Метод Гуро сочетает приличное качество картинки с относительно маленьким количеством вычислений и компактным набором данных, который суть есть простое расширении основной полигональной модели. Однако, имеется важных недостатков. Качество освещения с использованием метода Гуро сильно зависит от размера рисуемых многоугольников. Используется линейная интерполяция, так что световые пятна, такие, какими каждой стороны полигона, что выглядит весьма нереалистично. Еще одна проблема — Метод Гуро не является корректным с точки зрения перспективы, т. е. в некоторых случаях можно получить результат, зависящий от положения наблюдателя.

Листинг прораммы

unit Unit1;

interface

uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, Menus, OpenGL;

type TfrmGL = class (TForm) procedure FormCreate (Sender: TObject); procedure FormPaint (Sender: TObject); procedure FormDestroy (Sender: TObject); procedure FormKeyDown (Sender: TObject; varKey: Word; Shift: TShiftState); procedure FormResize (Sender: TObject);

private DC: HDC; hdc: HGLRC;

end;

var frmGL: TfrmGL;

implementation {$R*.DFM} Перерисовка окна} procedureTfrmGL. FormPaint (Sender: TObject); begin glClear (GL_COLOR_BUFFER_BIT or GL_DEPTH_BUFFER_BIT); // очистка буфера цвета glBegin (GL_QUADS); glNormal3f (0.0,0.0,1.0); glVertex3f (1.0,1.0,1.0); glVertex3f (-1.0,1.0,1.0); glVertex3f (-1.0,-1.0,1.0); glVertex3f (1.0,-1.0,1.0); glEnd; glBegin (GL_QUADS); glNormal3f (-1.0,0.0,0.0); glVertex3f (-1.0,1.0,1.0); glVertex3f (-1.0,1.0,-1.0); glVertex3f (-1.0,-1.0,-1.0); glVertex3f (-1.0,-1.0,1.0); glEnd; glBegin (GL_QUADS); glNormal3f (0.0,1.0,0.0); glVertex3f (-1.0,1.0,-1.0); glVertex3f (-1.0,1.0,1.0); glVertex3f (1.0,1.0,1.0); glVertex3f (1.0.1.0,-1.0); glEnd; SwapBuffers (DC); end;

Формат пиксела} procedureSetDCPixelFormat (hdc:HDC); var pfd: TPixelFormatDescriptor; nPixelFormat: Integer; begin FillChar (pfd, SizeOf (pfd), 0); pfd. dwFlags := PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL or PFD_DOUBLEBUFFER; nPixelFormat:=ChoosePix (hdc,@pfd); SetPixelFormat (hdc, nPixelFormat,@pfd); end; {Создание формы} procedure TfrmGL. FormCreate (Sender: TObject); begin DC:=GetDC (Handle); SetDCPixelFormat (DC); hrc:=wglCreateContext (DC); wglMakeCurrent (DC, hrc); glClearColor (0.5,0.5,0.75,1.0);//цвет фона glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); glEnable (GL_DEPTH_TEST); glShadeModel (GL_Smooth); end; конец работы приложения} procedure TfrmGL. FormDestroy (Sender: TObject); begin wglMakeCurrent (0.0); wglDeleteContext (hrc); ReleaseDC (Handle, DC); DeleteDC (DC); end; procedure TfrmGL. FormKeyDown (Sender: TObject;varKey:Word; Shift: TShiftState); begin If Key = VK_ESCAPE then Close; end; procedure TfrmGL. FormResize (Sender: TObject); begin glViewport (0,0,ClientWidth, ClientHeight); glMatrixMode (GL_PROJECTION); glLoadIdentity; glFrustum (-1,1,-1,1,4,10); glMatrixMode (GL_MODELVIEW); glLoadIdentity; //этот фрагмент нужен для придания трехмерности glTranslatef (0.0,0.0,-8.0); // перенос объекта — осьZ glRotatef (30.0,1.0,0.0,0.0); // поворот объектаосьX glRotatef (70.0,0.0,1.0,0.0); // поворот объекта-осьY InvalidateRect (Handle, nil, False); end; end.

Заключение

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

Список используемой литературы

1. .Петербург", 2005

2. Шикин Е. В., Боресков А. В., Компьютерная графика. Динамика, реалистические изображения. — М.: «Диалог — Мифи», 2000

3. Шикин Е. В., Боресков А. В., Компьютерная графика. Полигональные модели. — М.: «Диалог — Мифи», 2005

4. www.render.ru

5. www.3dcenter.ru

Показать весь текст
Заполнить форму текущей работой