Главная » Просмотр файлов » Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)

Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366), страница 7

Файл №1124366 Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (Ю.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC)) 7 страницаЮ.М. Баяковский, А.В. Игнатенко - Начальный курс OpenGL (DOC) (1124366) страница 72019-05-11СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 7)

66

Глава 5. Материалы и освещение

включается вызовом команды glEnable (GL_NORMALEZE)

Для задания глобальных параметров освещения используют­ся команды

void glLightModel [ i f] (GLenum pname, GLenum param) void glLightModel [ i f]v (GLenum pname,

const GLtype *params)

Аргумент pname определяет, какой параметр модели освеще­ния будет настраиваться и может принимать следующие значе­ния:

GL_LIGHT_MODEL_LOCAL_ VIEWER - параметр

param должен быть булевым и задает положение наблюда­теля. Если он равен GL_FALSE, то направление обзора счи­тается параллельным оси — z вне зависимости от положе­ния в видовых координатах. Если же он равен GL_TRUE, то наблюдатель находится в начале видовой системы коор­динат. Это может улучшить качество освещения, но услож­няет его расчет.

Значение по умолчанию: GL_FALSE.

GL_LIGHT_MODEL_TWO_SIDE — параметр param дол­жен быть булевым и управляет режимом расчета освещен­ности как для лицевых, так и для обратных граней. Если он равен GL_FALSE, то освещенность рассчитывается только для лицевых граней. Если же он равен GL_TRUE, расчет проводится и для обратных граней.

Значение по умолчанию: GL_FALSE.

GL_LIGHT_MODE_AMBIENT —параметр params дол­жен содержать четыре целых или вещественных числа, ко­торые определяют цвет фонового освещения даже в случае отсутствия определенных источников света.

Значение по умолчанию: (0.2, 0.2, 0.2,1.0).

5.2. Спецификация материалов

67

5.2. Спецификация материалов

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

void glMaterial[i f] (GLenum face , GLenum pname,

GLtype param) void glMaterial[i f]v (GLenum face , GLenum pname,

GLtype *params)

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

GL AMBIENT — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют рассеянный цвет материала (цвет материала в тени).

Значение по умолчанию: (0.2, 0.2, 0.2,1.0).

GL DIFFUSE —параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют диффузный цвет материала.

Значение по умолчанию: (0.8, 0.8, 0.8,1.0).

GL SPECULAR — параметр params должен содержать четы­ре целых или вещественных значения цветов RGBA, кото­рые определяют зеркальный цвет материала.

Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

GL_SHININESS —параметр params должен содержать одно целое или вещественное значение в диапазоне от 0 до 128, которое определяет степень зеркального отражения мате­риала.

Значение по умолчанию: 0.

68

Глава 5. Материалы и освещение

GL EMISSION — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют интенсивность излучаемого света материала.

Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

GL_ AMBIENT_ ANDDIFFUSE - эквивалентно

двум вызовам команды glMaterialQ со значением pname GL_AMBIENT и GL_DIFFUSE и одинаковыми значениями params.

Из этого следует, что вызов команды glMaterial [ i f]() возмо­жен только для установки степени зеркального отражения ма­териала (shininess). Команда glMaterial [i f]v() используется для задания остальных параметров.

Параметр face определяет тип граней, для которых зада­ется этот материал и может принимать значения GL_FRONT, GL_BACK или GL_FRONT_AND_BACK.

Если в сцене материалы объектов различаются лишь одним параметром, рекомендуется сначала установить нужный режим, вызвав glEnable() с параметром GL_COLOR_MATERIAL, а затем использовать команду

void glColorMaterial (GLenum face , GLenum pname)

где параметр face имеет аналогичный смысл, а параметр pname может принимать все перечисленные значения. После этого зна­чения выбранного с помощью pname свойства материала для кон­кретного объекта (или вершины) устанавливаются вызовом ко­манды glColor, что позволяет избежать вызовов более ресурсоем­кой команды glMaterial и повышает эффективность программы. Другие методы оптимизации приведены в главе 9. Пример определения свойств материала:

float mat_dif[] = {0.8 ,0.8 ,0.8}; float mat_amb[] = {0.2, 0.2, 0.2}; float mat_spec[] = {0.6, 0.6, 0.6};

5.3. Описание источников света

69

float shininess = 0.7 * 128;

glMaterialfv (GL_FRONT_AND_BACK, GL_AMBIENT,

mat_amb); glMaterialfv (GL_FRONT_AND_BACK, GL_DIFFUSE,

mat_dif); glMaterialfv (GL_FRONT_AND_BACK, GL_SPECULAR,

mat_spec); g 1M a t e r i a 1 f (GL_FR0NT, GL_SHININESS,

shininess);

5.3. Описание источников света

Определение свойств материала объекта имеет смысл, толь­ко если в сцене есть источники света. Иначе все объекты будут черными (или, строго говоря, иметь цвет, равный рассеянному цвету материала, умноженному на интенсивность глобального фонового освещения, см. команду glLightModel). Добавить в сце­ну источник света можно с помощью команд

void glLight [ i f] (GLenum light , GLenum pname,

GLfloat param) void glLight [ i f] (GLenum light , GLenum pname,

GLfloat *params)

Параметр light однозначно определяет источник света. Он выбирается из набора специальных символических имен вида GL_LIGHTi, где i должно лежать в диапазоне от 0 до кон­станты GL_MAX_LIGHT, которая обычно не превосходит вось­ми.

Параметры pname и params имеют смысл, аналогичный ко­манде glMaterial. Рассмотрим значения параметра pname:

GL_SPOT_EXPONENT —параметр param должен содер­жать целое или вещественное число от 0 до 128, задающее

70

Глава 5. Материалы и освещение

распределение интенсивности света. Этот параметр описы­вает уровень сфокусированности источника света.

Значение по умолчанию: 0 (рассеянный свет).

GL_SPOT_CUTOFF —параметр param должен содержать целое или вещественное число между 0 и 90 или равное 180, которое определяет максимальный угол разброса све­та. Значение этого параметра есть половина угла в вершине конусовидного светового потока, создаваемого источником.

Значение по умолчанию: 180 (рассеянный свет).

GL AMBIENT — параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет фонового освещения.

Значение по умолчанию: (0.0, 0.0, 0.0,1.0).

GL DIFFUSE —параметр params должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют цвет диффузного освещения.

Значение по умолчанию: (1.0,1.0,1.0,1.0) для GL_LIGHT0 и (0.0,0.0,0.0,1.0) для остальных.

GL SPECULAR — параметр params должен содержать четы­ре целых или вещественных значения цветов RGBA, кото­рые определяют цвет зеркального отражения.

Значение по умолчанию: (1.0,1.0,1.0,1.0) для GL_LIGHT0 и (0.0,0.0,0.0,1.0) для остальных.

GL POSITION —параметр params должен содержать четыре целых или вещественных числа, которые определяют поло­жение источника света. Если значение компоненты w рав­но 0.0, то источник считается бесконечно удаленным и при расчете освещенности учитывается только направление на точку (х,у, z), в противном случае считается, что источник расположен в точке (х, у, z,w). В первом случае ослабления

5.3. Описание источников света

71

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

Значение по умолчанию: (0.0, 0.0,1.0, 0.0).

GL_SPOT_DIRECTION —параметр params должен хра­нить четыре целых или вещественных числа, которые опре­деляют направление света.

Значение по умолчанию: (0.0, 0.0, —1.0,1.0).

Эта характеристика источника имеет смысл, если значение GL_SPOT_CUTOFF отлично от 180 (которое, кстати, зада­но по умолчанию).

GLCONSTANTATTENUATION ,

GLLINEARATTENUATION ,

GL_QUADRATIC_ATTENUATION -параметр params задает значение одного из трех коэффициентов, опреде­ляющих ослабление интенсивности света при удалении от источника. Допускаются только неотрицательные значения. Если источник не является направленным (см. GL_POSITION), то ослабление обратно пропорционально сумме:

attconstant + attlinear * d + attquadratic * d2

где d — расстояние между источником света и осве­
щаемой им вершиной; attconstant, attlinear и
attquadratic равны параметрам, заданным с по­
мощью констант GL_CONSTANT_ ATTENUATION,
GL_LINEAR_ATTENUATION и
GL_QUADRATIC_ATTENUATION соответственно. По
умолчанию эти параметры задаются тройкой (1,0,0), и
фактически ослабления не происходит.

72

Глава 5. Материалы и освещение

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

Общее правило такое: если положение источника света зада­ется командой glLight перед определением положения виртуаль­ной камеры (например, командой glLookAtQ), то будет считаться, что координаты (0,0,0) источника находится в точке наблюде­ния и, следовательно, положение источника света определяется относительно положения наблюдателя.

Если положение устанавливается между определением поло­жения камеры и преобразованиями модельно-видовой матрицы объекта, то оно фиксируется, т.е. в этом случае положение источ­ника света задается в мировых координатах. Для использования освещения сначала надо установить соответствующий режим вы­зовом команды glEnable(GL_LIGHTING), а затем включить нуж­ный источник командой glEnable(GL_LIGHTi).

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

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

5.4- Создание эффекта тумана

73

Текст программы, демонстрирующей основные принципы определения материалов и источников света, приведен в при­ложении Б.

5.4. Создание эффекта тумана

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

Туман в OpenGL реализуется путем изменения цвета объек­тов в сцене в зависимости от их глубины, т.е. расстояния до точ­ки наблюдения. Изменение цвета происходит либо для вершин примитивов, либо для каждого пикселя на этапе растеризации в зависимости от реализации OpenGL. Этим процессом можно частично управлять — см. раздел 7.

Для включения эффекта затуманивания необходимо вызвать команду glEnable(GL_FOG).

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

void glFog[if] (enum pname, T param) void glFog[if]v (enum pname, T params)

Аргумент pname может принимать следующие значения:

GL FOG MODE — аргумент param определяет формулу, по которой будет вычисляться интенсивность тумана в точке.

В этом случае param может принимать следующие значения: GL_EXP —интенсивность задается формулой / = e^~d*z'; GL_EXP2 —интенсивность задается формулой / = е-^*2^ ;

74

Глава 5. Материалы и освещение

Характеристики

Тип файла
Документ
Размер
3,41 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6549
Авторов
на СтудИзбе
300
Средний доход
с одного платного файла
Обучение Подробнее