130 likes | 292 Views
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); // Способ вычисления углов зеркального отражения
E N D
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(GLenumface, GLenumpname, 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(GLenumsfactor, GLenumdfactor); 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