Урок 5 - Материалы и освещение

  Материалы в OpenGL – это способность полигона реагировать на свет по-своему.
Материал задаётся функцией glMaterialfv(glFace,Param,@array).

  Параметр glFace задает, на какие плоскости будет применён материал и может принимать следующие значения:

  • GL_FRONT – лицевая плоскость;
  • GL_BACK – задняя плоскость;
  • GL_FRONT_AND_BACK – все плоскости.
Параметр Param определяет сам тип материала и может принимать значения:
  • GL_AMBIENT – цвет рассеянного света;
  • GL_SPECULAR – цвет зеркального света;
  • GL_DIFFUSE – цвет диффузного света (смешанного);
  • GL_SHININESS – сила блика;
  • GL_EMISSION - интенсивность излучаемого света.
@array – это ссылка на массив с параметрами. Массив состоит из 4 чисел (Красный, зелёный, синий и альфа канал). Диапазоны чисел от 0 до 1.

  Но для GL_SHININESS параметрами будет не массив, а одно число от 128 до 0, 0 – это максимальная сила блика, а 128 минимальная. В связи с этим изменится и сама функция с glMaterialfv на glMaterialf. Окончание fv на конце названия функции означает, что параметром будет массив типа PGLfloat – это специальный тип данных в OpenGL, он эквивалентен типу Single. Окончание f означает, что параметром будет не массив, а одно число типа GLfloat. Этот тип данных тоже эквивалентен Single. Есть ещё и окончание i , параметром будет число типа Integer.

Чтобы лучше было понятно зададим все 5 видов материала:
glmaterialfv( GL_FRONT_AND_BACK, GL_AMBIENT, @amb); //рассеянный цвет 
glmaterialfv( GL_FRONT_AND_BACK, GL_SPECULAR, @spec); //зеркальный цвет 
glmaterialfv( GL_FRONT_AND_BACK ,GL_DIFFUSE, @dif); //диффузный цвет
glmaterialfv( GL_FRONT_AND_BACK , GL_EMISSION, @emis); //интенсивность излучаемого света        
glmaterialf ( GL_FRONT_AND_BACK ,GL_SHININESS, 60); //мощность блика   
  Если мы хотим нарисовать 2 и более примитива с разными материалами, то функцию следует вызывать каждый раз перед рисованием примитива.

С материала мы закончили, теперь перейдём к освещению.

  Как создать и добавить источник света на сцену мы знаем из прошлых уроков, а вот как изменять свойства источника света мы узнаем сейчас!

  У источников света есть функция glLightfv. Она имеет те же самые параметры, что у glmaterialfv, кроме GL_ SHININESS, GL_EMISSION и glFace. glFace заменён на имя источника света (GL_LIGHT0 – GL_LIGHT7). У неё есть и другие параметры, которые относятся только к источнику света:
  • GL_SPOT_EXPONENT параметр param должен содержать целое или вещественное число от 0 до 128, задающее распределение интенсивности света. Этот параметр описывает уровень сфокусированности источника света. Значение по умолчанию: 0 (рассеянный свет).

  • GL_SPOT_CUTOFF параметр param должен содержать целое или вещественное число между 0 и 90 или равное 180, которое определяет максимальный угол разброса света. Значение этого параметра есть половина угла в вершине конусовидного светового потока, создаваемого источником. Значение по умолчанию: 180 (рассеянный свет).

  • GL_POSITION параметр params должен содержать четыре целых или вещественных, которые определяют положение источника света. Если значение компоненты w равно 0.0, то источник считается бесконечно удаленным и при расчете освещенности учитывается только направление на точку (x,y,z), в противном случае считается, что источник расположен в точке (x,y,z,w). Значение по умолчанию: (0.0, 0.0, 1.0, 0.0).

  • GL_SPOT_DIRECTION параметр params должен содержать четыре целых или вещественных числа, которые определяют направление света. Значение по умолчанию: (0.0, 0.0, -1.0, 1.0).


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

В следующем уроке мы узнаем, как накладывать текстуру в OpenGL.



Добавил(а): qwerty Дата: 2012-12-04
Сильно разбираться - лень. Скачал пример, запустил, при нажатии клавиш ничего не происходит(



Добавил(а): Admin Дата: 2012-12-04
Происходит, просто удерживай стрелку вверх по дольше, секунд 10...



Добавил(а): sheen12 Дата: 2013-11-04
не понятно



Добавил(а): Dyasok Дата: 2016-04-03
источник света в примере не вращается



Добавил(а): IanamusZura Дата: 2016-04-28



Добавил(а): fetisoff.nik Дата: 2016-05-15
А как сделать чтобы источник света вращался по оси XOY?


    No results found.
Отменить.