Урок 5 - Материалы и освещение
Материалы в OpenGL – это способность полигона реагировать на свет по-своему.
Материал задаётся функцией glMaterialfv(glFace,Param,@array).
Параметр glFace задает, на какие плоскости будет применён материал и может принимать следующие значения:
- GL_FRONT – лицевая плоскость;
- GL_BACK – задняя плоскость;
- GL_FRONT_AND_BACK – все плоскости.
- GL_AMBIENT – цвет рассеянного света;
- GL_SPECULAR – цвет зеркального света;
- GL_DIFFUSE – цвет диффузного света (смешанного);
- GL_SHININESS – сила блика;
- GL_EMISSION - интенсивность излучаемого света.
Но для 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.