GameDev :: OpenGL @ Урок 7

Урок 7. Материалы:

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

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

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

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

Значение params зависит от значения pname.
Итак, ниже представлены все значения 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.
  • GL_EMISSION параметр
    params
    должен содержать четыре целых или вещественных значения цветов RGBA, которые определяют интенсивность излучаемого света материала. Значение по умолчанию: (0.0, 0.0, 0.0, 1.0).
  • GL_AMBIENT_AND_DIFFUSE эквивалентно двум вызовам команды glMaterial..() со значением pname GL_AMBIENT и GL_DIFFUSE и одинаковыми значениями params.

А для чего же тогда служит параметр face? Параметр face определяет тип граней, для которых задается этот материал и может принимать значения

GL_FRONT
(передняя грань),
GL_BACK
(задняя грань) или
GL_FRONT_AND_BACK
(задняя и передняя).

Теперь посмотрим на маленький пример:

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);

На этом закончим. В следующем уроке поговорим об источниках света.

До встречи в следующем уроке!
Alex Salo

Навигация
Назад | Список уроков | Вперед
Используются технологии uCoz