Transcript
Page 1: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Моделирование трехмерных поверхностей.Закрашивание.

Page 2: Компьютерная графика.  Лекция 5

Моделирование поверхностей

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

Компьютерная графика. Лекция 5

Page 3: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Полигональные сетки (Polygonal meshes)

Полигональные сетки – набор полигонов (граней), которые в совокупности формируют оболочку объекта

– Это стандартный способ визуального представления широкого класса объемных фигур

– Многие системы визуализации основаны на изображении объектов посредством рисования последовательности полигонов

Page 4: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Достоинства полигональных сеток

Основаны на простоте использования полигонов:

Легко представлять и преобразовыватьОбладают простыми свойствами

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

внешняя областиПростота рисования

подпрограмма закрашивания полигонов или наложения текстуры на плоскую грань

Полигональные сетки позволяют представлять трехмерные объекты практически любой степени сложности

Page 5: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Примеры

Page 6: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Монолитные объекты и тонкие оболочки

Полигональные сетки позволяют задавать объекты двух типов:Монолитные (solid) объекты

– полигональные грани плотно примыкают друг к другу и ограничивают некоторое пространство

Примеры: куб, сфераТонкие оболочки

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

Пример: график функции z=f(x,y)

Page 7: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Примеры

Page 8: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Вершины полигона

Каждый полигон определяется путем перечисления его вершин

Вершина задается при помощи перечисления ее координат в пространстве

Page 9: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Пример представления вершины полигональной сетки

struct Vertex{

GLfloatx;GLfloaty;GLfloatz;

};

Page 10: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Нормаль к полигону

Вектор нормали задает направление перпендикуляра грани

При рисовании объекта эта информация используется для определения того, сколько света рассеивается на данной грани

Page 11: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Пример представления нормали полигона

struct Normal{

GLfloatx;GLfloaty;GLfloatz;

};

Page 12: Компьютерная графика.  Лекция 5

НОРМАЛИ В ВЕРШИНАХ И НОРМАЛИ В ПОВЕРХНОСТЯХ Использование нормалей к грани плохо

подходит для визуализации гладких поверхностей, например, сферы

Удобнее оказывается связывать вектор нормали с каждой вершиной грани Такой способ упрощает процесс отсечения и

процесс закрашивания гладких криволинейных форм

Компьютерная графика. Лекция 5

Page 13: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Нормали в вершинах и нормали в поверхностях

В OpenGL нормаль является атрибутом вершины

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

Одна и та же вершина может входить в состав нескольких смежных граней

– Вывод: лучше хранить все вершины сетки (с их атрибутами) в отдельном массиве

– При задании граней указывать индексы используемых вершин

Page 14: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Пример структур данных для хранения сеток

struct Vector3d{

GLfloat x, y, z;};

struct Mesh{

GLuint numVertices;Vertex *pVertices;

GLuint numFaces;Face *pFaces;

};

struct Vertex{

Vector3d position;Vector3d normal;// …

};

struct Face{

GLushort v0;GLushort v1;GLushort v2;

};

Page 15: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Возможные вариации

Если полигональная сетка задается при помощи однотипных примитивов, например, треугольников, то можно представить грани в виде массива индексов вершин.

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

Page 16: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Примерstruct Vector3d{

GLfloat x, y, z;};

struct Mesh{

GLuint numVertices;Vertex *pVertices;

GLenum primitiveType;GLuint numIndices;GLushort *pIndices;

};

struct Vertex{

Vector3d position;Vector3d normal;// …

};

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();

}

Page 17: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Лицевые и нелицевые стороны граней

Каждая плоская грань (полигон) имеет две стороны:

– лицевую (видна извне объекта)– нелицевую (видна изнутри объекта)– В один момент времени с заданной точки

видна только одна сторона граниснаружи монолитного объекта видны

только лицевые грани– OpenGL позволяет эффективно отбрасывать

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

Page 18: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Определение видимой стороны грани

Для определения стороны грани, повернутой к наблюдателю, OpenGL использует направление

обхода вершин грани после проецирования– OpenGL позволят выбрать направление

обхода вершин лицевых гранейНаправление обхода нелицевых вершин

будет противоположным– Вершины всех граней сетки необходимо

перечислять в одном и том направлении обхода, если смотреть на лицевую сторону граней

Page 19: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Обход сторон куба против часовой стрелки

Page 20: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Команда glFrontFace

Задает направление обхода вершин грани, соответствующее ее лицевой стороне (Front

face):– void glFrontFace(GLenum mode)

где mode:GL_CW – по часовой стрелке (Clockwise) GL_CCW – против часовой стрелки

(Counter clockwise), это значение по умолчанию

Page 21: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Режим отбраковки граней (Face culling)

После того, как направление обхода вершин грани установлено, OpenGL может произвести ее отбраковку

Для этого необходимо включить режим отбраковки граней и указать какие из граней должны быть отбракованы

Page 22: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Управление режимом отбраковки граней

• glEnable(GL_CULL_FACE)• glDisable(GL_CULL_FACE)• void glCullFace(GLenum mode)

где mode:– GL_FRONT– GL_BACK– GL_FRONT_AND_BACK

Page 23: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Нахождение нормальных векторов (нормалей)

Координаты нормалей для каждой вершины можно задавать:

– вручную (в процессе моделирования)– вычислять аналитически (перпендикуляр к

криволинейной поверхности, описываемой функционально)

– вычислять на основе полигональной сетки

Page 24: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Задание нормалей вручную

Позволяет задать нормали к поверхности способом, лучшим с точки зрения дизайнера

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

Page 25: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Редактирование нормалей в программе 3D Studio Max

Page 26: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Аналитический метод нахождения нормалей

Для функционально заданных поверхностей вектор нормали по направлению совпадает с вектором антиградиента в точке поверхностиНахождение градиента:

– Нахождение вектора частных производных– Численное дифференцирование

z

F

y

F

x

F

dz

dF

dy

dF

dx

dFzyxF

zyxzyxF

,,

),,( 22

Page 27: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Пример

Пусть необходимо найти градиент в точке (1,1) к поверхности:

– Z = x2 + y2

Решение:

122)2,1,1()11,1,1()1,1(

122,,

),,(

22

22

FFF

yxzyxF

zyxzyxF

Для формирования нормали необходимо нормализовать данный вектор (привести его к единичной длине)

Page 28: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Вычисление нормалей для плоских граней полигональной сетки

Для плоских граней сетки достаточно вычислить перпендикуляр к каждой грани и связать его с каждой из вершин этой грани

– использование векторного произведения векторов, соединяющих соседние вершины граней

Проблемы:– большие погрешности вычисления в случае

выбора почти параллельных векторов– проблемы с гранями, имеющими больше 3

вершин

Page 29: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Метод Ньюэла для нахождения нормали к плоской грани

Разработан Мартином Ньюэллом, решает указанные проблемы простого способа

Njjnext

yyxxn

xxzzn

zzyyn

N

iinextiinextiz

N

iinextiinextiy

N

iinextiinextix

mod)1()(

;))((

,))((

,))((

1

0)()(

1

0)()(

1

0)()(

Page 30: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Нахождение нормали к вершинам сетки, описывающим криволинейную поверхность

Грани сетки, описывающей криволинейную поверхность, могут иметь общие вершины

За вектор нормали в таких вершинах можно принять среднее арифметическое нормалей прилегающих граней

Page 31: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Свойства сеток

МонолитностьСовокупность грани сетки заключает в себе

некоторое пространство Связность

Между любыми двумя вершинами сетки существует непрерывный путь вдоль ребер полигонов

ПростотаСетка является монолитной и не содержит отверстий

ПлоскостностьКаждая грань сетки является плоским полигоном

ВыпуклостьОтрезок прямой, соединяющий любые две

внутренние точки объекта целиком лежит внутри него

Page 32: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Моделирование поверхностей вращенияПоверхность вращения образуется посредством

вращательной развертки с заметанием профильной кривой C вокруг некоторой оси

– Тор– Пешка– Сфера– Купол церкви– Рюмки, тарелки– Колба лампы накаливания

Page 33: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Создание поверхности вращения

Page 34: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Поверхности на базе функций двух переменных

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

– y=f(x, z)Для визуализации таких поверхностей обычно вычисляют значение y в узлах равномерной сетки вдоль осей x и z, а затем рисуют последовательность ячеек полученной сетки

Page 35: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Пример поверхности заданной, функцией sinc с круговой симметрией

22

22 )sin(

zx

zxy

Page 36: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Равномерно разбиваем отображаемую область функции вдоль осей x и y

x

y

Page 37: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Вычисляем значение координаты z и нормалей в узлах сетки

Page 38: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Рисуем сетку с помощью лент из треугольников

x

y

0

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

Page 39: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Или даже с помощью одной ленты

0

1

2

3

4

5

6

7

8

9

1413121110

0-1-2-3-4-5-6-7-8-9-(9-14)-

14-9-13-7-12-5-11-3-10-1-(10-10)-

19 20 21 22

10-19-11-20-12-21-13-22-14-23-...

23

Page 40: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Результат

Page 41: Компьютерная графика.  Лекция 5

ЗАКРАШИВАНИЕ

Компьютерная графика. Лекция 5

Page 42: Компьютерная графика.  Лекция 5

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

Отражение света от поверхности зависит: от физических свойств материала, из

которого она изготовлена от характера и расположения источника

света.

Компьютерная графика. Лекция 5

Закрашивание

Page 43: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Типы источников света

Источники света, в зависимости от характера освещения можно разделить на: точечные источники; прожекторы; удаленные источники.

Page 44: Компьютерная графика.  Лекция 5

Точечный источник света

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

Компьютерная графика. Лекция 5

Page 45: Компьютерная графика.  Лекция 5

Прожектор

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

Компьютерная графика. Лекция 5

Page 46: Компьютерная графика.  Лекция 5

Удалённый источник света

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

Компьютерная графика. Лекция 5

Page 47: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Свойства освещения

Световая энергия может: излучаться поверхностью отражаться от поверхности проходить сквозь поверхность

Яркость (или интенсивность) освещения зависит от энергии светового потока, которая обуславливается:

1. мощностью источника света2. отражающими и пропускающими

свойствами объекта

Page 48: Компьютерная графика.  Лекция 5

Можно выделить три основных типа характера взаимодействия света и материала

поверхности:1. диффузное отражение;2. зеркальное отражение;3. преломление.

Компьютерная графика. Лекция 5

Взаимодействие света и поверхности

Page 49: Компьютерная графика.  Лекция 5

Диффузное отражение Диффузное отражение

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

Компьютерная графика. Лекция 5

Такой тип взаимодействия характерен для поверхности равномерно окрашенной стены или поверхности Земли, как она представляется пилоту самолета или космического летательного аппарата.

Page 50: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Диффузное отражение

Освещение точечным источником

Свет точечного источника отражается от поверхности рассеивателя по закону Ламберта: интенсивность отражения пропорциональна косинусу угла между внешней нормалью к поверхности и направлением к источнику света

Page 51: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Диффузное отражение

Если - интенсивность источника света, - угол между вектором внешней нормали к поверхности и направлением к источнику света, то интенсивность отраженного света определяется формулой

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

Page 52: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Диффузное отражение

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

 где - коэффициент диффузного отражения рассеянного света, - коэффициент диффузного отражения падающего света,

Page 53: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

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

 где - расстояние до центра проекции, а - произвольная постоянная.

Диффузное отражение

Page 54: Компьютерная графика.  Лекция 5

Зеркальное отражениеЗеркальное отражение

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

Зеркало - это идеально отражающая поверхность. Хотя небольшая часть энергии падающего луча и поглощается, остальной свет отражается под одним углом, причем этот угол равен углу падения луча.

Компьютерная графика. Лекция 5

Page 55: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Свойства зеркального отражения

• Зеркальное отражение является направленным

• Идеальное зеркало отражает лучи по принципу "отраженный и падающий лучи лежат в одной плоскости, причем угол падения равен углу отражения"

• Если поверхность не идеально зеркальная, то лучи отражаются в различных направлениях, но с разной интенсивностью, а функция изменения интенсивности имеет четко выраженный максимум

• Поскольку физические свойства зеркального отражения довольно сложны, то в компьютерной графике используется эмпирическая модель Фонга

Page 56: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Модель Фонга

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

Page 57: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Модель ФонгаМодель Фонга описывается соотношением

где - функция отражения, - длина волны. Степень, в которую возводится косинус угла, влияет на размеры светового блика, наблюдаемого зрителем.

Page 58: Компьютерная графика.  Лекция 5

Преломление

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

Компьютерная графика. Лекция 5

Page 59: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

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

Алгоритмы локального освещения - самые простые способы расчета освещенности поверхностей, рассматривают отражение или пропускание света для каждой поверхности 3D сцены независимо от других поверхностей, принимая во внимание только первичные источники света (задача Lighting/Shading: интенсивность, цвет, направление распространения отражённого и преломленного света).

Глобальное и локальное освещение

Page 60: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Простая (локальная) модель освещенностиМодель освещенности, учитывающую зеркальное и диффузное отражения, можно описать формулой

 Учитывая, что , где - направление к источнику, - внешняя нормаль, а отраженный вектор , где , получаем формулу

Page 61: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Более сложные модели освещенностиВозникает необходимость использовать

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

Page 62: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Более сложные модели освещенности

Пропускание света может быть диффузным (если часть энергии света рассеивается средой) или направленным: • в первом случае мы имеем дело с

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

• во втором случае тело является прозрачным, и оно визуально обнаруживается только благодаря искажениям объектов за счет преломления лучей.

Page 63: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Более сложные модели освещенности

Преломление в призме

При наличии в пространственной сцене прозрачных или полупрозрачных объектов надо учитывать, что изображение других объектов будет отличаться от обычной проекции на картинную плоскость

Page 64: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Эффекты восприятия изображения

Глаз адаптируется к средней яркости рассматриваемой сцены, поэтому при смене фона изменяется восприятие сцены. Однородно окрашенная область на более темном фоне будет казаться более яркой, чем на светлом. Кроме того, она будет восприниматься как более обширная

Page 65: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Плоское закрашивание

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

Page 66: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Закраска методом Гуро

• Используются не нормали к плоским граням, а нормали к аппроксимируемой поверхности, построенные в вершинах многогранника.

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

Page 67: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Закраска методом Гуро

Метод сочетается с алгоритмом построчного сканирования• для каждой сканирующей строки

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

Page 68: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Интерполяция интенсивности

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

 После этого интенсивность в точке получаем путем интерполяции значений на концах отрезка:

Page 69: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Недостатки метода Гуро

Хорошо работает только с диффузной моделью отражения

• форма бликов на поверхности и их расположение не могут быть адекватно воспроизведены при интерполяции на многоугольниках.

Есть проблема построения нормалей к поверхности

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

Page 70: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Закраска методом Фонга

• Вместо интерполяции интенсивностей производится интерполяция вектора нормали к поверхности на сканирующей строке

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

Page 71: Компьютерная графика.  Лекция 5

Компьютерная графика. Лекция 5

Сравнение методов закрашивания

Page 72: Компьютерная графика.  Лекция 5

Стандартная поддержка освещенности в OpenGL

Максимум – 8 источников света Значение цвета примитива вычисляется

для каждой его вершины. Полученные цветовые значения линейно

интерполируются (освещение по Гуро)

Компьютерная графика. Лекция 5

Page 73: Компьютерная графика.  Лекция 5

Параметры, влияющие на освещенность в OpenGL

Текущий вектор нормали Свойства материала Параметры источников света Параметры модели освещения

Компьютерная графика. Лекция 5

Page 74: Компьютерная графика.  Лекция 5

Свойства материалаРазличные материалы по разному

отражают светНекоторые материалы сами излучают

свет, например, фосфорВ OpenGL материал обладает

следующими свойствами:Рассеянный цвет (GL_AMBIENT)Диффузный цвет (GL_DIFFUSE)Цвет зеркального отражения (GL_SPECULAR)Излучаемый цвет (GL_EMISSION)Степень зеркального отражения (GL_SHININESS)

Компьютерная графика. Лекция 5

Page 75: Компьютерная графика.  Лекция 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

Page 76: Компьютерная графика.  Лекция 5

Установка цвета материала при помощи glColorПри включенном освещении текущий

цвет вершины не используетсявместо него используются цветовые

характеристики материалаОднако использование команды glMaterial*

для изменения цвета отдельных вершин может показаться громоздким

Команда glColorMaterial позволяет задавать параметры отдельных вершин с использованием команды glColor при включенном освещенииДля включения данной функции надо

выполнить:glEnable(GL_COLOR_MATERIAL)

Компьютерная графика. Лекция 5

Page 77: Компьютерная графика.  Лекция 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

Page 78: Компьютерная графика.  Лекция 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

Page 79: Компьютерная графика.  Лекция 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

Page 80: Компьютерная графика.  Лекция 5

Скалярные параметры источника освещения

GL_SPOT_EXPONENT Распределение интенсивности света (от 0 до 128).

Увеличение данного параметра делает источник света более сфокусированным

GL_SPOT_CUTOFF максимальный угол разброса источника света [0, 90]

или 180 для точечных источников GL_CONSTANT_ATTENUATION,

GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION Постоянный, линейный и квадратичный факторы

ослабления света с расстоянием от источника света до вершины:

1/(k0 + k1*S + k2*S2)

Компьютерная графика. Лекция 5

Page 81: Компьютерная графика.  Лекция 5

Конический источник света

GL_SPOT_CUTOFF

Компьютерная графика. Лекция 5

Page 82: Компьютерная графика.  Лекция 5

Векторные параметры источника освещения

GL_AMBIENT – интенсивность фонового освещения GL_DIFFUSE – интенсивность диффузного

освещения GL_SPECULAR – интенсивность зеркального

отражения GL_POSITION – позиция источника света в

однородных координатах объекта Если компонент w равен 0, то источник света

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

GL_SPOT_DIRECTION – параметр params задает трехкомпонентный вектор направления конического источника света

Компьютерная графика. Лекция 5

Page 83: Компьютерная графика.  Лекция 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

Page 84: Компьютерная графика.  Лекция 5

Влияние освещения на реалистичность изображения

Компьютерная графика. Лекция 5


Recommended