Компьютерная графика | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
теория, алгоритмы, примеры на С++ и OpenGL | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
2D теория | 3D теория | OpenGL | Обратная связь / Авторам | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
Мы vkontakte.ru ДрузьяСловарь синонимов русского языка |
Свойства материалаДля любого объекта на сцене надо определить свойства материала отражать различные компоненты освещения: фоновую, рассеянную и зеркальную. Это можно сделать командой: glMaterialfv(GLenum face, GLenum pname, const GLfloat *params);
Параметр pname задает, какое свойство материала передается через params. Ниже приведена таблица возможных значений pname со значениями по умолчанию и краткими пояснениями. Значения по умолчанию для лицевой и тыльной сторон совпадают.
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);
|