{ OpenGL Лекция 3 ( )
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_BACK задняя грань GL_FONT передняя грань GL_FONT передняя грань GL_FRONT_AND_BACK обе грани GL_FRONT_AND_BACK обе грани Свойства материала
Второй параметр функции glMaterialfv определяет свойство материала, которое будет установлено, и может принимать следующие значения. GL_AMBIENT рассеянный свет GL_AMBIENT рассеянный свет GL_DIFFUSE тоже рассеянный свет GL_DIFFUSE тоже рассеянный свет GL_SPECULAR отраженный свет GL_SPECULAR отраженный свет GL_EMISSION излучаемый свет GL_EMISSION излучаемый свет GL_SHININESS степень отраженного света GL_SHININESS степень отраженного света GL_AMBIENT_AND_DIFFUSE оба рассеянных света 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: 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. 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. 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: 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. 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. The initial value is GL_ZERO. glBlendFunc