OpenGL

advertisement
OpenGL
{
Лекция 3 (03.10.2013)
float ambient[4] = {0.0, 0.0, 0.0, 1.0};
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient);
// RGBA интенсивность всей сцены
glLightModelf(GL_LIGHT_MODEL_LOCAL_VIEWER, GL_FALSE);
// Способ вычисления углов зеркального отражения
glLightModelf(GL_LIGHT_MODEL_TWO_SIDE, GL_FALSE);
// Выбор между односторонним и двухсторонним освещением
Модель освещения
glDepthFunc(GL_LESS);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,
GL_FASTEST);
glEnable(GL_LIGHTING);
glDisable(GL_LIGHTING);
glEnable(GL_LIGHT0); … glEnable(GL_LIGHT7);
glDisable(GL_LIGHT0); … glDisable(GL_LIGHT7);
Включение освещения
glShadeModel(GL_SMOOTH);
// Освещение и цвет рассчитываются для каждой
вершины и интерполируются (Default)
glShadeModel(GL_FLAT);
// Вся грань закрашивается с использованием цвета и
освещенности, рассчитанных для ее первой вершины
Тип расчета освещения
glEnable(GL_NORMALIZE);
glBegin(GL_QUADS);
glNormal3f(0, 0, +1);
glVertex3f(-1, -1, -1);
glVertex3f(-1, +1, -1);
glVertex3f(+1, +1, -1);
glVertex3f(+1, -1, -1);
glEnd();
Нормаль к поверхности
float light_position[] = {0.0, 0.0, 0.0, 1.0};
glLightfv(GL_LIGHT1, GL_POSITION, light_position);
// Положение источника света (x, y, z, w)
float light_direction[] = {1.0, 0.0, 0.0};
glLightfv(GL_LIGHT1, GL_SPOT_DIRECTION, light_direction);
// Направление света прожектора (x, y, z)
Положение лампы и
направление света
glLightf(GL_LIGHT1, GL_SPOT_EXPONENT, 64);
// Экспонента яркости от центра до края конуса
glLightf(GL_LIGHT1, GL_SPOT_CUTOFF, 90);
// Угловая ширина светового луча
Параметры прожектора
float light_ambient[] = {0.04, 0.04, 0.04, 1.0};
glLightfv(GL_LIGHT1, GL_AMBIENT, light_ambient);
// Интенсивность фонового света
float light_diffuse[] = {1.0, 0.85, 0.85, 1.0};
glLightfv(GL_LIGHT1, GL_DIFFUSE, light_diffuse);
// Интенсивность диффузного света
float light_specular[] = {0.5, 0.45, 0.45, 1.0};
glLightfv(GL_LIGHT1, GL_SPECULAR, light_specular);
// Интенсивность зеркального света
Интенсивность света
glLightf(GL_LIGHT1, GL_CONSTANT_ATTENUATION, 1.0);
glLightf(GL_LIGHT1, GL_LINEAR_ATTENUATION, 0.3);
glLightf(GL_LIGHT1, GL_QUADRATIC_ATTENUATION, 0.0);
Fatt = 1 / (Kc + Kl * d + Kq * (d * d))
где:
d — расстояние между позицией источника света и
экраном,
Kc — GL_CONSTANT_ATTENUATION (постоянный фактор
ослабления),
Kl — GL_LINEAR_ATTENUATION (линейный фактор
ослабления),
Kq — GL_QUADRATIC_ATTENUATION (квадратичный
фактор ослабления).
Ослабление света
glEnable (GL_COLOR_MATERIAL);
// Учитывать цвет примитивов
Материал может рассеивать, отражать и излучать свет. Свойства
материала устанавливаются при помощи функции
glMaterialfv(GLenum face, GLenum pname, GLtype* params)
Первый параметр определяет грань, для которой устанавливаются
свойства. Он может принимать одно из следующих значений:
 GL_BACK задняя грань
 GL_FONT передняя грань
 GL_FRONT_AND_BACK обе грани
Свойства материала
Второй параметр функции glMaterialfv определяет свойство материала,
которое будет установлено, и может принимать следующие значения.
 GL_AMBIENT рассеянный свет
 GL_DIFFUSE тоже рассеянный свет
 GL_SPECULAR отраженный свет
 GL_EMISSION излучаемый свет
 GL_SHININESS степень отраженного света
 GL_AMBIENT_AND_DIFFUSE оба рассеянных света
Ambient и diffuse переводятся на русский как "рассеянный". Разница
между ними не очень понятна. Третий параметр определяет цвет
соответствующего света, кроме случая GL_SHININESS. Цвет задается в
виде массива из четырех элементов - RGBA. В случае GL_SHININESS
params указывает на число типа float, которое должно быть в диапазоне от
0 до 128.
Свойства материала
glEnable(GL_ALPHA_TEST);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// glBlendFunc(GL_SRC_ALPHA, GL_ONE);
glColor4f(1, 1, 1, 0.75);
Прозрачность
void glBlendFunc(GLenum sfactor, GLenum dfactor);
sfactor
Specifies how the red, green, blue, and alpha source blending factors are
computed. The following symbolic constants are accepted:
GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR,
GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA,
GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA,
GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR,
GL_CONSTANT_ALPHA, GL_ONE_MINUS_CONSTANT_ALPHA, and
GL_SRC_ALPHA_SATURATE.
The initial value is GL_ONE.
dfactor
Specifies how the red, green, blue, and alpha destination blending factors are
computed. The following symbolic constants are accepted:
GL_ZERO, GL_ONE, GL_SRC_COLOR, GL_ONE_MINUS_SRC_COLOR,
GL_DST_COLOR, GL_ONE_MINUS_DST_COLOR, GL_SRC_ALPHA,
GL_ONE_MINUS_SRC_ALPHA, GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA.
GL_CONSTANT_COLOR, GL_ONE_MINUS_CONSTANT_COLOR,
GL_CONSTANT_ALPHA, and GL_ONE_MINUS_CONSTANT_ALPHA.
The initial value is GL_ZERO.
glBlendFunc
Download