Название: Компьютерная графика(Е.Н. Павенко)

Жанр: Информатика

Просмотров: 1429


2. спецификация материалов в opengl

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

            glMaterialfv(face, type, pointer_to_array);

            glMaterilf(face, type, value);

Для определения коэффициентов отражения для фоновой, диффузионной и зеркальной составляющих (ka, kd, ks) по каждому из первичных цветов в программу нужно включить определение трех массивов:

            GLfloat ambient[]= {0.2, 0.2, 0.2, 1.0};

            GLfloat diffise[]= {1.0, 0.8, 0.0, 1.0};

            GLfloat specular[]= {1.0, 1.0, 1.0, 1.0};

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

            glMaterialfv(G_FRONT_AND_BACK, GL_AMBIENT, ambient);

            glMaterialfv(G_FRONT_AND_BACK, GL_DIFFUSE, diffuse);

            glMaterialfv(G_FRONT_AND_BACK, GL_SPECULAR, specular);

Если параметры для зеркальной и диффузионной составляющих одинаковы, то можно задавать их одним вызовом функции glMaterialfv(), передав ей в качестве параметра type константу GL_DIFFUSE_AND_SPECULAR. При индивидуальном определении параметров материалов для внутренней и внешней стороны в качестве аргумента face используются соответственно константы GL_FRONT и GL_BACK.

Коэффициент резкости бликов – показатель степени зеркального отражения в модели Фонга – задается вызовом функции glMaterialfv(), которой в качестве параметра  type передается константа GL_SHININESS:

glMaterialfv(GL_FRONT_AND_BACK, GL_SHININESS, 100);

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

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

GLfloat emission[]={0.0, 0.3, 0.3, 1.0};

glMaterialfv(GL_FRONT_AND_BACK, GL_EMISSION, emission);

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

 

Таблица 6.2

Значения по умолчанию для параметра glMaterial*()

Имя параметра

Значение

Содержание

GL_AMBIENT

(0.2, 0.2, 0.2, 1.0)

ambient color of material

GL_DIFFUSE

(0.8, 0.8, 0.8, 1.0)

diffuse color of material

GL_AMBIENT_AND_DIFFUSE

 

ambient and diffuse color of material

GL_SPECULAR

(0.0, 0.0, 0.0, 1.0)

specular color of material

GL_SHININESS

0.0

specular exponent

GL_EMISSION

(0.0, 0.0, 0.0, 1.0)

emissive color of material

GL_COLOR_INDEXES

(0,1,1)

ambient, diffuse, and specular color indices