Полигональные сетки

advertisement
Компьютерная графика. Лекция 5
Моделирование трехмерных поверхностей.
Закрашивание.
Компьютерная графика. Лекция 5
Моделирование поверхностей
Результатом решения задачи моделирования
является множество вершин, однозначно
определяющих набор геометрических объектов.
Компьютерная графика. Лекция 5
Полигональные сетки (Polygonal
meshes)
Полигональные сетки – набор полигонов (граней),
которые в совокупности формируют оболочку объекта
– Это
стандартный
способ
визуального
представления широкого класса объемных фигур
– Многие системы визуализации основаны на
изображении объектов посредством рисования
последовательности полигонов
Компьютерная графика. Лекция 5
Достоинства полигональных сеток
 Основаны на простоте использования полигонов:
 Легко представлять и преобразовывать
 Обладают простыми свойствами
 единственный вектор нормали
 четко определенные внутренняя и внешняя
области
 Простота рисования
 подпрограмма закрашивания полигонов или
наложения текстуры на плоскую грань
 Полигональные сетки позволяют представлять
трехмерные объекты практически любой степени
сложности
Компьютерная графика. Лекция 5
Примеры
Компьютерная графика. Лекция 5
Монолитные объекты и тонкие оболочки
Полигональные сетки позволяют задавать объекты
двух типов:
Монолитные (solid) объекты
– полигональные грани плотно примыкают друг к
другу и ограничивают некоторое пространство
 Примеры: куб, сфера
Тонкие оболочки
– Полигональные грани примыкают друг к другу
без ограничения пространства, представляя
собой поверхность бесконечно малой толщины
 Пример: график функции z=f(x,y)
Компьютерная графика. Лекция 5
Примеры
Компьютерная графика. Лекция 5
Вершины полигона
Каждый полигон определяется путем перечисления
его вершин
Вершина задается при помощи перечисления ее
координат в пространстве
Компьютерная графика. Лекция 5
Пример представления вершины
полигональной сетки
struct Vertex
{
GLfloat x;
GLfloat y;
GLfloat z;
};
Компьютерная графика. Лекция 5
Нормаль к полигону
Вектор
нормали
перпендикуляра грани
задает
направление
При рисовании объекта эта информация используется
для определения того, сколько света рассеивается на
данной грани
Компьютерная графика. Лекция 5
Пример представления нормали
полигона
struct Normal
{
GLfloat x;
GLfloat y;
GLfloat z;
};
Компьютерная графика. Лекция 5
НОРМАЛИ В ВЕРШИНАХ И НОРМАЛИ В
ПОВЕРХНОСТЯХ
Использование нормалей к грани плохо
подходит для визуализации гладких
поверхностей, например, сферы
 Удобнее оказывается связывать вектор
нормали с каждой вершиной грани


Такой способ упрощает процесс отсечения и
процесс закрашивания гладких криволинейных
форм
Компьютерная графика. Лекция 5
Нормали в вершинах и нормали в
поверхностях
В OpenGL нормаль является атрибутом вершины
– С т.з. быстродействия выгоднее хранить
отдельную копию вектора нормали для
каждой вершины
Одна и та же вершина может входить в состав
нескольких смежных граней
– Вывод: лучше хранить все вершины сетки (с
их атрибутами) в отдельном массиве
– При задании граней указывать индексы
используемых вершин
Компьютерная графика. Лекция 5
Пример структур данных для хранения
сеток
struct Vector3d
{
GLfloat x, y, z;
};
struct Vertex
{
Vector3d position;
Vector3d normal;
// …
};
struct Face
{
GLushort v0;
GLushort v1;
GLushort v2;
};
struct Mesh
{
GLuint numVertices;
Vertex *pVertices;
GLuint numFaces;
Face
*pFaces;
};
Компьютерная графика. Лекция 5
Возможные вариации
Если полигональная сетка задается при помощи
однотипных примитивов, например, треугольников, то
можно представить грани в виде массива индексов
вершин.
Необходимо выбирать структуры данных, наиболее
подходящих для решения конкретной задачи
Компьютерная графика. Лекция 5
Пример
struct Vector3d
{
GLfloat x, y, z;
};
struct Vertex
{
Vector3d
Vector3d
// …
};
position;
normal;
struct Mesh
{
GLuint numVertices;
Vertex *pVertices;
GLenum primitiveType;
GLuint numIndices;
GLushort *pIndices;
};
void DrawMesh(Mesh *pMesh)
{
glBegin(pMesh->primitiveType);
for (GLuint i = 0; i < pMesh.numIndices; ++i)
{
GLushort v = pIndices[i];
glNormalfv(&(pMesh->pVertices[v].normal.x));
glVertex3fv(&(pMesh->pVertices[v].position.x));
}
glEnd();
}
Компьютерная графика. Лекция 5
Лицевые и нелицевые стороны граней
Каждая плоская грань (полигон) имеет две стороны:
– лицевую (видна извне объекта)
– нелицевую (видна изнутри объекта)
– В один момент времени с заданной точки видна
только одна сторона грани
 снаружи монолитного объекта видны только
лицевые грани
– OpenGL позволяет эффективно отбрасывать
лицевые или нелицевые грани, что ускоряет
процесс рисования
Компьютерная графика. Лекция 5
Определение видимой стороны грани
Для определения стороны грани, повернутой к
наблюдателю, OpenGL использует направление
обхода вершин грани после проецирования
– OpenGL позволят выбрать направление обхода
вершин лицевых граней
 Направление обхода нелицевых вершин будет
противоположным
– Вершины всех граней сетки необходимо
перечислять в одном и том направлении обхода,
если смотреть на лицевую сторону граней
Компьютерная графика. Лекция 5
Обход сторон куба против часовой стрелки
Компьютерная графика. Лекция 5
Команда glFrontFace
Задает направление обхода вершин грани,
соответствующее ее лицевой стороне (Front face):
– void glFrontFace(GLenum mode)
где mode:
 GL_CW – по часовой стрелке (Clockwise)
 GL_CCW – против часовой стрелки (Counter
clockwise), это значение по умолчанию
Компьютерная графика. Лекция 5
Режим отбраковки граней (Face culling)
После того, как направление обхода вершин грани
установлено, OpenGL может произвести ее отбраковку
Для этого необходимо включить режим отбраковки
граней и указать какие из граней должны быть
отбракованы
Компьютерная графика. Лекция 5
Управление режимом отбраковки граней
• glEnable(GL_CULL_FACE)
• glDisable(GL_CULL_FACE)
• void glCullFace(GLenum mode)
где mode:
– GL_FRONT
– GL_BACK
– GL_FRONT_AND_BACK
Компьютерная графика. Лекция 5
Нахождение нормальных векторов
(нормалей)
Координаты нормалей для каждой вершины можно
задавать:
– вручную (в процессе моделирования)
– вычислять аналитически (перпендикуляр к
криволинейной
поверхности,
описываемой
функционально)
– вычислять на основе полигональной сетки
Компьютерная графика. Лекция 5
Задание нормалей вручную
Позволяет задать нормали к поверхности способом,
лучшим с точки зрения дизайнера
Основной недостаток – он очень утомителен и во
многих случаях может быть заменен на методы
автоматического генерирования нормалей
Компьютерная графика. Лекция 5
Редактирование нормалей в программе
3D Studio Max
Компьютерная графика. Лекция 5
Аналитический метод нахождения
нормалей
Для функционально заданных поверхностей вектор
нормали по направлению совпадает с вектором
антиградиента в точке поверхности
Нахождение градиента:
– Нахождение вектора частных производных
– Численное дифференцирование
F ( x, y , z )  x 2  y 2  z
 dF
F  x, y, z   
 dx

dF
dy
dF
dz
  F


 x
 
F
y
F
z




Компьютерная графика. Лекция 5
Пример
Пусть необходимо найти градиент в точке (1,1) к
поверхности:
– Z = x2 + y2
Решение:
F ( x, y , z )  x 2  y 2  z
F  x, y, z   2 x
2y
 1
F (1,1)  F (1,1,12  12 )  F (1,1,2)  2
2
 1
Для формирования нормали необходимо нормализовать
данный вектор (привести его к единичной длине)
Компьютерная графика. Лекция 5
Вычисление нормалей для плоских
граней полигональной сетки
Для плоских граней сетки достаточно вычислить
перпендикуляр к каждой грани и связать его с
каждой из вершин этой грани
– использование
векторного
произведения
векторов, соединяющих соседние вершины
граней
Проблемы:
– большие погрешности вычисления в случае
выбора почти параллельных векторов
– проблемы с гранями, имеющими больше 3
вершин
Компьютерная графика. Лекция 5
Метод Ньюэла для нахождения нормали к
плоской грани
Разработан
Мартином
Ньюэллом,
указанные проблемы простого способа
N 1
nx   ( yi  ynext (i ) )( zi  z next (i ) ),
i 0
N 1
n y   ( zi  z next (i ) )( xi  xnext (i ) ),
i 0
N 1
nz   ( xi  xnext (i ) )( yi  ynext (i ) );
i 0
next( j )  ( j  1) mod N
решает
Компьютерная графика. Лекция 5
Нахождение нормали к вершинам сетки,
описывающим криволинейную
поверхность
Грани
сетки,
описывающей
криволинейную
поверхность, могут иметь общие вершины
За вектор нормали в таких вершинах можно принять
среднее арифметическое нормалей прилегающих
граней
Компьютерная графика. Лекция 5
Свойства сеток
 Монолитность




 Совокупность грани сетки заключает в себе некоторое
пространство
Связность
 Между любыми двумя вершинами сетки существует
непрерывный путь вдоль ребер полигонов
Простота
 Сетка является монолитной и не содержит отверстий
Плоскостность
 Каждая грань сетки является плоским полигоном
Выпуклость
 Отрезок прямой, соединяющий любые две внутренние
точки объекта целиком лежит внутри него
Компьютерная графика. Лекция 5
Моделирование поверхностей вращения
Поверхность вращения образуется посредством
вращательной развертки с заметанием профильной
кривой C вокруг некоторой оси
– Тор
– Пешка
– Сфера
– Купол церкви
– Рюмки, тарелки
– Колба лампы накаливания
Компьютерная графика. Лекция 5
Создание поверхности вращения
Компьютерная графика. Лекция 5
Поверхности на базе функций двух
переменных
Некоторые
поверхности однозначны в одном
измерении, поэтому могут быть явно выражены
функции двух независимых переменных
Такие функции еще называют полем высот и задают в
виде формулы следующего типа:
– y=f(x, z)
Для визуализации таких поверхностей обычно
вычисляют значение y в узлах равномерной сетки
вдоль осей x и z, а затем рисуют последовательность
ячеек полученной сетки
Компьютерная графика. Лекция 5
Пример поверхности заданной, функцией
sinc с круговой симметрией
y
sin( x  z )
2
x z
2
2
2
Компьютерная графика. Лекция 5
Равномерно разбиваем отображаемую
область функции вдоль осей x и y
y
x
Компьютерная графика. Лекция 5
Вычисляем значение координаты z и
нормалей в узлах сетки
Компьютерная графика. Лекция 5
Рисуем сетку с помощью лент из
треугольников
y
x
0
2
4
6
8
10
12
14
16
18
20
22
24
26
1
3
5
7
9
11
13
15
17
19
21
23
25
27
Компьютерная графика. Лекция 5
Или даже с помощью одной ленты
0
2
4
6
8
0-1-2-3-4-5-6-7-8-9-(9-14)1
3
5
7
9
14-9-13-7-12-5-11-3-10-1-(10-10)10
11
12
13
14
10-19-11-20-12-21-13-22-14-23-...
19
20
21
22
23
Компьютерная графика. Лекция 5
Результат
Компьютерная графика. Лекция 5
ЗАКРАШИВАНИЕ
Компьютерная графика. Лекция 5
Закрашивание
Для реализации закрашивания объектов сцены,
нужно понимать физику реального процесса
распространения
световой
энергии
в
материальной среде, природу источников света и
свойства материала поверхности.
Отражение света от поверхности зависит:
 от физических свойств материала, из которого она
изготовлена
 от характера и расположения источника света.
Компьютерная графика. Лекция 5
Типы источников света
Источники света, в зависимости от характера
освещения можно разделить на:
 точечные источники;
 прожекторы;
 удаленные источники.
Компьютерная графика. Лекция 5
Точечный источник света
Идеальный
точечный
источник света излучает
свет одинаково во всех
направлениях.
Использование
точечных
источников в большинстве
приложений
определяется
скорее простотой работы с
ними, чем желанием точно
передать
характеристики
реальных
физических
осветительных приборов.
Компьютерная графика. Лекция 5
Прожектор
Источники света типа прожектор отличаются тем,
что испускают свет направленным пучком, т.е.
каждая точка излучающей поверхности посылает
свет в одном и том же направлении. Проще всего
смоделировать прожектор с помощью точечного
источника света, ограничив для него направление, в
котором распространяются световые лучи.
Компьютерная графика. Лекция 5
Удалённый источник света
Характерной
особенностью
удалённого источника света
является
то,
что
все
испускаемые им лучи можно
считать
параллельными.
Использование
такого
источника в сцене избавляет о
необходимости
рассчитывать
направления
лучей,
освещающих разные точки
отображаемой поверхности, а
значит, существенно повышает
скорость
формирования
изображения.
Прекрасным
примером такого источника
является солнце.
Компьютерная графика. Лекция 5
Свойства освещения
Световая энергия может:
 излучаться поверхностью
 отражаться от поверхности
 проходить сквозь поверхность
Яркость (или интенсивность) освещения зависит от
энергии светового потока, которая обуславливается:
1. мощностью источника света
2. отражающими и пропускающими свойствами
объекта
Компьютерная графика. Лекция 5
Взаимодействие света и поверхности
1.
2.
3.
Можно выделить три основных типа характера
взаимодействия света и материала поверхности:
диффузное отражение;
зеркальное отражение;
преломление.
Компьютерная графика. Лекция 5
Диффузное отражение
Диффузное отражение возникает
в ситуации, когда свет как бы
проникает
под
поверхность
объекта, поглощается, а потом
равномерно излучается во всех
направлениях.
Видимая
освещенность того или иного
участка поверхности не зависит от
положения наблюдателя.
Такой тип взаимодействия характерен для поверхности
равномерно окрашенной стены или поверхности Земли, как
она представляется пилоту самолета или
космического
летательного аппарата.
Компьютерная графика. Лекция 5
Диффузное отражение
Освещение точечным источником
Свет точечного
источника
отражается от
поверхности
рассеивателя по
закону Ламберта:
интенсивность
отражения
пропорциональна
косинусу угла между
внешней нормалью к
поверхности и
направлением к
источнику света
Компьютерная графика. Лекция 5
Диффузное отражение
Если 𝐼𝑆 - интенсивность источника света, 𝜑 - угол
между вектором внешней нормали к поверхности и
направлением к источнику света, то интенсивность
отраженного света определяется формулой
𝐼𝑆 𝑐𝑜𝑠𝜑 при 0 ≤ 𝜑 ≤ 𝜋/2
𝐼=
0 в противном случае
При таком расчете интенсивности получится очень
контрастная картина, т.к. участки поверхности, на
которые лучи от источника не попадают напрямую,
останутся абсолютно черными.
Компьютерная графика. Лекция 5
Диффузное отражение
Для
повышения
реалистичности
необходимо
учитывать
рассеивание
света
в
окружающем
пространстве. Поэтому вводится фоновая освещенность,
зависящая от интенсивности рассеянного света 𝐼𝐹 , и
интенсивность
отраженного
света
определяется
выражением
𝐼𝐹 𝑘𝐹 + 𝑘𝑆 𝐼𝑆 𝑐𝑜𝑠𝜑 при 0 ≤ 𝜑 ≤ 𝜋/2
𝐼=
𝐼𝐹 𝑘𝐹 в противном случае
где 𝑘𝑆 - коэффициент диффузного отражения
рассеянного света, 𝑘𝐹 - коэффициент диффузного
отражения падающего света, 0 ≤ 𝑘𝑆 ≤ 1, 0 ≤ 𝑘𝐹 ≤ 1.
Компьютерная графика. Лекция 5
Диффузное отражение
Для
получения
перспективного
изображения
необходимо включить затухание интенсивности света с
расстоянием.
В этом случае интенсивность отраженного света от
непосредственно освещенных участков поверхности
будет задаваться формулой
𝑘𝑆 𝐼𝑆 𝑐𝑜𝑠𝜑
𝐼 = 𝐼𝐹 𝑘𝐹 +
𝑑+𝐶
где 𝑑 - расстояние до центра проекции, а 𝐶
произвольная постоянная.
-
Компьютерная графика. Лекция 5
Зеркальное отражение
Зеркальное отражение происходит
от
внешней
поверхности,
интенсивность его неоднородна,
поэтому видимый максимум
освещенности
зависит
от
положения глаза наблюдателя.
Зеркало
это
идеально
отражающая поверхность. Хотя
небольшая
часть
энергии
падающего луча и поглощается,
остальной свет отражается под
одним углом, причем этот угол
равен углу падения луча.
Компьютерная графика. Лекция 5
Свойства зеркального отражения
• Зеркальное отражение является направленным
• Идеальное зеркало отражает лучи по принципу
"отраженный и падающий лучи лежат в одной
плоскости, причем угол падения равен углу
отражения"
• Если поверхность не идеально зеркальная, то лучи
отражаются в различных направлениях, но с
разной интенсивностью, а функция изменения
интенсивности имеет четко выраженный максимум
• Поскольку физические свойства зеркального
отражения довольно сложны, то в компьютерной
графике используется эмпирическая модель Фонга
Компьютерная графика. Лекция 5
Модель Фонга
Для глаза наблюдателя интенсивность зеркально
отраженного луча зависит от угла между идеально
отраженным лучом и направлением к
наблюдателю, а также от длины волны.
Компьютерная графика. Лекция 5
Модель Фонга
Модель Фонга описывается соотношением
𝐼𝑍 = 𝜔(𝜑, 𝜆) ∙ 𝐼𝑆 𝑐𝑜𝑠 𝑛 𝜓
где 𝜔(𝜑, 𝜆) - функция отражения, 𝜆 - длина волны.
Степень, в которую возводится косинус угла, влияет
на размеры светового блика, наблюдаемого
зрителем.
Компьютерная графика. Лекция 5
Преломление
Луч света, падающий на поверхность, преломляется
и проникает в среду объекта под другим углом.
Этот процесс рефракции характерен для стекла и
воды. Как правило, при этом отражается часть
падающего света.
Компьютерная графика. Лекция 5
Глобальное и локальное освещение
Алгоритмы моделирования освещения условно
можно разделить на две группы: алгоритмы
локального освещения и алгоритмы глобального
освещения.
Алгоритмы локального освещения - самые простые
способы
расчета
освещенности
поверхностей,
рассматривают отражение или пропускание света
для каждой поверхности 3D сцены независимо от
других поверхностей, принимая во внимание только
первичные
источники
света
(задача
Lighting/Shading: интенсивность, цвет, направление
распространения отражённого и преломленного
света).
Компьютерная графика. Лекция 5
Простая (локальная) модель
освещенности
Модель освещенности, учитывающую зеркальное и
диффузное отражения, можно описать формулой
𝐼𝑆 (𝑘𝑆 𝑐𝑜𝑠𝜑 + 𝜔(𝜑, 𝜆) ∙ 𝑐𝑜𝑠 𝑛 𝜓
𝐼 = 𝐼𝐹 𝑘𝐹 +
𝑑+𝐶
Учитывая, что cos 𝜑 = 𝐿 ∙ 𝑛 , где 𝐿 - направление к
источнику, 𝑛 - внешняя нормаль, а отраженный
вектор 𝑟 = 𝐴𝐵 ∙ 𝑛 − 𝐿 , где 𝐴𝐵 = 2 ∙ (𝐿 ∙ 𝑛) , получаем
формулу
𝐼 = 𝐼𝐹 𝑘𝐹 +
𝐼𝑆 (𝑘𝑆 𝐿 ∙ 𝑛 + 𝜔(𝜑, 𝜆) ∙ 2 ∙ 𝐿 ∙ 𝑛 ∙ 𝑒 ∙ 𝑛 − (𝑒 ∙ 𝐿)
𝑑+𝐶
𝑛
Компьютерная графика. Лекция 5
Более сложные модели освещенности
Возникает необходимость использовать полупрозрачные
объекты, т.е. учитывать не только отражение, но и
преломление.
Согласно закону Синеллиуса преломленный луч лежит
в плоскости, образуемой нормалью к плоскости и
падающим лучом, а углы, образуемые лучами с
нормалью, связаны формулой 𝜂1 sin 𝜃1 = 𝜂2 sin 𝜃2 , где
𝜂1 , 𝜂2 - показатели преломления двух сред
Компьютерная графика. Лекция 5
Более сложные модели освещенности
Пропускание света может быть диффузным
(если часть энергии света рассеивается средой)
или направленным:
• в первом случае мы имеем дело с
полупрозрачными телами, которые изменяют
окраску видимых сквозь них объектов.
• во втором случае тело является прозрачным,
и оно визуально обнаруживается только
благодаря искажениям объектов за счет
преломления лучей.
Компьютерная графика. Лекция 5
Более сложные модели освещенности
При наличии в
пространственной сцене
прозрачных или
полупрозрачных объектов
надо учитывать, что
изображение других объектов
будет отличаться от обычной
проекции на картинную
плоскость
Преломление в призме
Компьютерная графика. Лекция 5
Эффекты восприятия изображения
Глаз
адаптируется
к
средней
яркости
рассматриваемой сцены, поэтому при смене фона
изменяется восприятие сцены.
Однородно окрашенная область на более темном
фоне будет казаться более яркой, чем на светлом.
Кроме того, она будет восприниматься как более
обширная
Компьютерная графика. Лекция 5
Плоское закрашивание
Если предположить, что источник света находится
на бесконечности, то лучи света, падающие на
поверхность, параллельны между собой.
Если наблюдатель находится в бесконечно
удаленной точке, то эффектом ослабления света с
увеличением расстояния от источника можно
пренебречь.
Векторы,
направленные
от
разных
точек
поверхности
к
наблюдателю,
также
будут
параллельны.
При выполнении всех этих условий, плоская грань
во всех точках имеет одинаковую интенсивность
освещения, поэтому она закрашивается одним
цветом. Такое закрашивание называется плоским.
Компьютерная графика. Лекция 5
Закраска методом Гуро
• Используются не нормали к плоским граням, а
нормали
к
аппроксимируемой
поверхности,
построенные в вершинах многогранника.
• Вычисляются интенсивности в вершинах, а затем
во всех внутренних точках
выполняется
билинейная
интенсивности.
многоугольника
интерполяция
Компьютерная графика. Лекция 5
Закраска методом Гуро
Метод сочетается с алгоритмом построчного
сканирования
• для каждой сканирующей строки определяются ее
точки пересечения с ребрами. В этих точках
интенсивность вычисляется с помощью линейной
интерполяции интенсивностей в вершинах ребра.
• затем для всех внутренних
точек
многоугольника,
лежащих на сканирующей
строке, также вычисляется
интенсивность
методом
линейной
интерполяции
двух
полученных
значений.
Компьютерная графика. Лекция 5
Интерполяция интенсивности
Пусть 𝐼𝐴 , 𝐼𝐵 , 𝐼𝐶 - интенсивности в вершинах A,B,C, 𝑥𝐴 ,
𝑥𝐵 , 𝑥𝑐 - горизонтальные координаты этих точек. Тогда в
точках пересечения сканирующей строки с ребрами
многоугольника интенсивности можно вычислить по
формулам интерполяции:
𝑥1 − 𝑥𝐵
𝐼1 = 𝑡1 𝐼𝐴 + 1 − 𝑡1 𝐼𝐵 ,
𝑡1 =
,
𝑥𝐴 − 𝑥𝐵
𝑥2 − 𝑥𝐶
𝐼2 = 𝑡2 𝐼𝐴 + 1 − 𝑡2 𝐼𝐶 ,
𝑡2 =
,
𝑥𝐴 − 𝑥𝐶
После этого интенсивность в точке 𝑥 получаем путем
интерполяции значений на концах отрезка:
𝐼 = 𝑡𝐼1 + 1 − 𝑡 𝐼2 ,
𝑥2 − 𝑥
𝑡=
,
𝑥2 − 𝑥1
Компьютерная графика. Лекция 5
Недостатки метода Гуро
Хорошо работает только с диффузной моделью
отражения
• форма бликов на поверхности и их
расположение не могут быть адекватно
воспроизведены при интерполяции на
многоугольниках.
Есть
проблема
построения
нормалей
к
поверхности
• В алгоритме Гуро нормаль в вершине
многогранника
вычисляется
путем
усреднения
нормалей
к
граням,
примыкающим к этой вершине. Такое
построение сильно зависит от характера
разбиения.
Компьютерная графика. Лекция 5
Закраска методом Фонга
• Вместо
интерполяции
интенсивностей
производится интерполяция вектора нормали
к поверхности на сканирующей строке
• Нормали
к
поверхности
в
вершинах
многогранника вычисляются так же, как и в
методе Гуро. Затем выполняется билинейная
интерполяция в сочетании с построчным
сканированием. После построения вектора
нормали в очередной точке вычисляется
интенсивность.
Компьютерная графика. Лекция 5
Сравнение методов закрашивания
Компьютерная графика. Лекция 5
Стандартная поддержка
освещенности в OpenGL
Максимум – 8 источников света
 Значение цвета примитива вычисляется для
каждой его вершины.
 Полученные цветовые значения линейно
интерполируются (освещение по Гуро)

Компьютерная графика. Лекция 5
Параметры, влияющие на
освещенность в OpenGL
Текущий вектор нормали
 Свойства материала
 Параметры источников света
 Параметры модели освещения

Компьютерная графика. Лекция 5
Свойства материала



Различные материалы по разному
отражают свет
Некоторые материалы сами излучают свет,
например, фосфор
В OpenGL материал обладает следующими
свойствами:





Рассеянный цвет (GL_AMBIENT)
Диффузный цвет (GL_DIFFUSE)
Цвет зеркального отражения (GL_SPECULAR)
Излучаемый цвет (GL_EMISSION)
Степень зеркального отражения (GL_SHININESS)
Компьютерная графика. Лекция 5
Задание свойств материала в OpenGL
 Для
определения вышеупомянутых
свойств материала используется
команда glMaterial:
glMaterial[f i](GLenum face, GLenum pname, type
param)
glMaterial[f i]v(GLenum face, GLenum pname, const
type *params)
 face – GL_FRONT, GL_BACK или
GL_FRONT_AND_BACK
 pname – GL_AMBIENT, GL_DIFFUSE,
GL_SPECULAR, GL_EMISSION,
GL_SHININESS

Компьютерная графика. Лекция 5
Установка цвета материала при
помощи glColor
 При включенном освещении текущий
цвет вершины не используется
вместо него используются цветовые
характеристики материала
 Однако использование команды glMaterial* для
изменения цвета отдельных вершин может
показаться громоздким


Команда glColorMaterial позволяет
задавать параметры отдельных вершин
с использованием команды glColor при
включенном освещении

Для включения данной функции надо выполнить:
glEnable(GL_COLOR_MATERIAL)
Компьютерная графика. Лекция 5
glColorMaterial
Позволяет определить какие параметры
материала изменяются при помощи команды
glColor
 glColorMaterial(GLenum face, GLenum mode)

face – GL_FRONT, GL_BACK,
GL_FRONT_AND_BACK
 mode – GL_AMBIENT, GL_DIFFUSE,
GL_SPECULAR, GL_EMISSION,
GL_AMBIENT_AND_DIFFUSE

Компьютерная графика. Лекция 5
Пример
void SetCubeMaterial()
{
glEnable(GL_COLOR_MATERIAL);
glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);
float specular[4] = {0.7f, 0.7f, 0.7f, 1};
glMaterialfv(GL_FRONT, GL_SPECULAR, specular);
glMaterialf(GL_FRONT, GL_SHININESS, 10);
}
Компьютерная графика. Лекция 5
Источники света в OpenGL
 Включение

glEnable(GL_LIGHTING)
 Включение


источника света:
glEnable(GL_LIGHTi), где i – число от 0 до
GL_MAX_LIGHTS (не может быть больше 8)
 Задание

режима освещения:
параметров источника света:
glLight[i f](GLenum light, GLenum pname, type
param)
glLight[i f]v(GLenum light, GLenum pname, const
type* params)
Компьютерная графика. Лекция 5
Скалярные параметры источника
освещения

GL_SPOT_EXPONENT


GL_SPOT_CUTOFF


Распределение интенсивности света (от 0 до 128). Увеличение
данного параметра делает источник света более
сфокусированным
максимальный угол разброса источника света [0, 90] или 180
для точечных источников
GL_CONSTANT_ATTENUATION,
GL_LINEAR_ATTENUATION,
GL_QUADRATIC_ATTENUATION


Постоянный, линейный и квадратичный факторы ослабления
света с расстоянием от источника света до вершины:
1/(k0 + k1*S + k2*S2)
Компьютерная графика. Лекция 5
Конический источник света
GL_SPOT_CUTOFF
Компьютерная графика. Лекция 5
Векторные параметры источника
освещения
GL_AMBIENT – интенсивность фонового освещения
 GL_DIFFUSE – интенсивность диффузного освещения
 GL_SPECULAR – интенсивность зеркального
отражения
 GL_POSITION – позиция источника света в
однородных координатах объекта



Если компонент w равен 0, то источник света рассматривается
как направленный и бесконечно удаленный. Диффузное и
зеркальное освещение рассчитываются исходя из направления
на источник. Ослабление света при этом не действует.
GL_SPOT_DIRECTION – параметр params задает
трехкомпонентный вектор направления конического
источника света
Компьютерная графика. Лекция 5
Пример установки источника света
void SetLights()
{
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
const float diffuseColor[4] = {0.8f, 0.8f, 0.8f, 1};
const float ambientColor[4] = {0.2f, 0.2f, 0.2f, 1};
const float specularColor[4] = {1.2f, 1.2f, 1.2f, 1};
const float lightDirection[4] = {0.0f, 0.0f, 1.0f, 0};
glLightfv(GL_LIGHT0, GL_AMBIENT, ambientColor);
glLightfv(GL_LIGHT0, GL_DIFFUSE, diffuseColor);
glLightfv(GL_LIGHT0, GL_POSITION, lightDirection);
}
Компьютерная графика. Лекция 5
Влияние освещения на
реалистичность изображения
Download