теория, алгоритмы, примеры на С++ и OpenGL  

Мы vkontakte.ru


Rambler's Top100 Rambler's Top100
Каталог@Mail.ru - каталог ресурсов интернет

Друзья

Словарь синонимов русского языка

Свойства материала

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

glMaterialfv(GLenum face, GLenum pname, const GLfloat *params);

Параметр face команды glMaterialfv

GL_FRONT

Свойства задаются для лицевой стороны поверхности.

GL_BACK
Свойства задаются для тыльной стороны поверхности.
GL_FRONT_AND_BACK

Свойства задаются для обеих сторон поверхности.

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

Параметр pname команды glMaterialfv

Имя параметра Значение по умолчанию

Краткий комментарий

GL_AMBIENT
(0.2, 0.2, 0.2, 1.0)
цвет фонового отражения материала
GL_DIFFUSE
(0.8, 0.8, 0.8, 1.0)
цвет рассеянного отражения материала
GL_SPECULAR
(0.0, 0.0, 0.0, 1.0)
цвет зеркального отражения материала
GL_EMISSION
(0.0, 0.0, 0.0, 1.0)
цвет собственного излучения материала
GL_SHININESS
0.0
степень в формуле зеркального отражения (коэффициент блеска). Допускаются значения в интервале [0; 128].
GL_AMBIENT_AND_DIFFUSE
 

цвет фонового и рассеянного отражения материала

params содержит указатель на массив из четырех чисел соответствующего типа (или одного для GL_SHININESS). Отсечения здесь не происходит и в расчете освещенности эти значения участвуют как есть. (Можно, к примеру, задать значение одной из компонент 2.0).

Для установки коэффициента блеска можно использовать команду:

glMaterialf(GLenum face, GL_SHININESS, GLfloat shininess);

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

Прим. Несмотря на то, что α-компонента имеется у всех свойств отражения, учитывается только значение для рассеянной компоненты.

Практический взгляд на цвет

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

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

В большинстве случаев источники света излучают белый свет различной интенсивности, а результирующий цвет в большей степени определяется свойствами материала. Фоновые компоненты подбираются таким образом, чтобы вклад фоновой освещенности был невелик. Большую часть результирующей освещенности вносит рассеянная составляющая.

Если пронаблюдать, как блики ложатся на реальные объекты, то вы увидите, что цвет блика совпадает с цветом источника света и практически не зависит от цвета поверхности. Поэтому зеркальное отражение материала имеет смысл задавать серым цветом, и варьировать цвет бликов, задавая зеркальную компоненту для источника света. Остроту бликов можно варьировать, изменяя коэффициент блеска.

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

Управление свойствами материала с помощью команды glColor4f

Может возникнуть такая ситуация, что требуется часто изменять одно из свойств материала, к примеру, рассеянное отражение. На этот случай в OpenGL предусмотрен удобный механизм. По умолчанию, при включении расчета освещения, текущий цвет, задаваемый командой glColor4f, игнорируется. Но, включив управление свойством материала с помощью текущего цвета (color-driven materials), можно изменять одну из характеристик отражения материала командой glColor4f. Это удобнее и может на некоторых реализациях работать быстрее при частом изменении свойств материала. Включается управление командой:

glEnable(GL_COLOR_MATERIAL);
Задать, какое конкретно свойство материала будет передаваться текущим цветом, можно командой:
glColorMaterial(GLenum face, GLenum mode);

Параметр face команды glColorMaterial

GL_FRONT

Свойства задаются для лицевой стороны поверхности.

GL_BACK
Свойства задаются для тыльной стороны поверхности.
GL_FRONT_AND_BACK

Свойства задаются для обеих сторон поверхности. Значение по умолчанию.


Параметр mode команды glColorMaterial

GL_EMISSION

Управление собственным излучением материала.

GL_AMBIENT
Управление фоновым отражением.
GL_DIFFUSE
Управление рассеянным отражением.
GL_SPECULAR
Управление зеркальным отражением.
GL_AMBIENT_AND_DIFFUSE

Одновременное управление фоновым и рассеянным свойствами отражения. Значение по умолчанию.