ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.06.2020
Просмотров: 1705
Скачиваний: 4
41
оси
–z,
вне
зависимости
от
положения
в
видовы
x
координатах
.
Если
же
он
равен
GL_TRUE
,
то
наблюдатель
находится
в
начале
видовой
системы
координат
.
Это
может
улучшить
качество
освещения
,
но
усложняет
его
расчет
.
Значение
по
умолчанию
:
GL_FALSE
.
GL_LIGHT_MODEL_TWO_SIDE
параметр
param
должен
быть
булевым
и
управляет
режимом
расчета
освещенности
,
как
для
лицевых
,
так
и
для
обратных
граней
.
Если
он
равен
GL_FALSE
,
то
освещенность
рассчитывается
только
для
лицевых
граней
.
Если
же
он
равен
GL_TRUE
,
расчет
проводится
и
для
обратных
граней
.
Значение
по
умолчанию
:
GL_FALSE
.
GL_LIGHT_MODEL_AMBIENT
параметр
params
должен
содержать
четыре
целых
или
вещественных
числа
,
которые
определяют
цвет
фонового
освещения
даже
в
случае
отсутствия
определенных
источников
света
.
Значение
по
умолчанию
: (0.2, 0.2, 0.2,1.0).
4.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).
42
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.
GL_EMISSION
параметр
params
должен
содержать
четыре
целых
или
вещественных
значения
цветов
RGBA,
которые
определяют
интенсивность
излучаемого
света
материала
.
Значение
по
умолчанию
: (0.0, 0.0, 0.0, 1.0).
GL_AMBIENT_AND_DIFFUSE
эквивалентно
двум
вызовам
команды
glMaterial*()
со
значением
pname
GL_AMBIENT
и
GL_DIFFUSE
и
одинаковыми
значениями
params
.
Из
этого
следует
,
что
вызов
команды
glMaterial[i f]()
возможен
только
для
установки
степени
зеркального
отражения
материала
(shininess).
Команда
glMaterial[i f]v()
используется
для
задания
остальных
параметров
.
Параметр
face
определяет
тип
граней
,
для
которых
задается
этот
материал
и
может
принимать
значения
GL_FRONT
,
GL_BACK
или
GL_FRONT_AND_BACK
.
Если
в
сцене
материалы
объектов
различаются
лишь
одним
параметром
,
рекомендуется
сначала
установить
нужный
режим
,
вызвав
glEnable()
c
параметром
GL_COLOR_MATERIAL
,
а
затем
использовать
команду
void
glColorMaterial
(GLenum
face
, GLenum
pname
)
43
где
параметр
face
имеет
аналогичный
смысл
,
а
параметр
pname
может
принимать
все
перечисленные
значения
.
После
этого
значения
выбранного
с
помощью
pname
свойства
материала
для
конкретного
объекта
(
или
вершины
)
устанавливаются
вызовом
команды
glColor*()
,
что
позволяет
избежать
вызовов
более
ресурсоемкой
команды
glMaterial*()
и
повышает
эффективность
программы
.
Другие
методы
оптимизации
приведены
в
п
. 8.2.
Пример
определения
свойств
материала
:
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};
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);
glMaterialf (GL_FRONT,GL_SHININESS, shininess);
4.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,
задающее
44
распределение
интенсивности
света
.
Этот
параметр
описывает
уровень
сфокусированности
источника
света
.
Значение
по
умолчанию
: 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,
то
источник
считается
бесконечно
удаленным
и
при
расчете
освещенности
учитывается
только
направление
на
точку
(x,y,z),
в
противном
случае
считается
,
что
источник
расположен
в
точке
(x,y,z,w).
В
первом
случае
ослабления
света
при
удалении
от
источника
не
45
происходит
,
т
.
е
.
источник
считается
бесконечно
удаленным
.
Значение
по
умолчанию
: (0.0, 0.0, 1.0, 0.0).
GL_SPOT_DIRECTION
параметр
params
должен
содержать
четыре
целых
или
вещественных
числа
,
которые
определяют
направление
света
.
Значение
по
умолчанию
: (0.0, 0.0, -1.0, 1.0).
Эта
характеристика
источника
имеет
смысл
,
если
значение
GL_SPOT_CUTOFF
отлично
от
180 (
которое
,
кстати
,
задано
по
умолчанию
).
GL_CONSTANT_ATTENUATION
,
GL_LINEAR_ATTENUATION
,
GL_QUADRATIC_ATTENUATION
параметр
params
задает
значение
одного
из
трех
коэффициентов
,
определяющих
ослабление
интенсивности
света
при
удалении
от
источника
.
Допускаются
только
неотрицательные
значения
.
Если
источник
не
является
направленным
(
см
.
GL_POSITION
),
то
ослабление
обратно
пропорционально
сумме
:
att
constant
+att
linear
*d+ att
quadratic
*d
2
,
где
d –
расстояние
между
источником
света
и
освещаемой
им
вершиной
,
att
constant
, att
linear
и
at-
t
quadratic
равны
параметрам
,
заданным
с
помощью
констант
GL_CONSTANT_ATTENUATION
,
GL_LINEAR_ATTENUATION
и
GL_QUADRATIC_ATTENUATION
соответственно
.
По
умолчанию
эти
параметры
задаются
тройкой
(1, 0, 0),
и
фактически
ослабления
не
происходит
.
При
изменении
положения
источника
света
следует
учитывать
следующий
факт
:
в
OpenGL
источники
света
являются
объектами
,
во
многом
такими
же
,
как
многоугольники
и
точки
.
На
них
распространяется
основное
правило
обработки
координат
в
OpenGL –