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