250 likes | 498 Views
OpenGL. Лекция 2. Преобразование координат. Преобразования координат. Преобразования координат. Видовое преобразование Проецирование Переход в нормализованные координаты Преобразование в области вывода. Управление окном просмотра.
E N D
OpenGL Лекция 2.
Преобразование координат
Преобразования координат • Видовое преобразование • Проецирование • Переход в нормализованные координаты • Преобразование в области вывода
Управление окном просмотра • glViewport(int x, int y, sizei w, sizei h) — задание окна просмотра • glDepthRange(clampd n, clampd f) — задание множителя и смещения для координаты по глубине
Матричные преобразования • glMatrixMode(enum mode) - установить текущую матрицу • GL_TEXTURE • GL_MODELVIEW • GL_COLOR • GL_PROJECTION • glLoadMatrix{fd}(T m[16]) – загрузить матрицу • glMultMatrix{fd}(T m[16]) – умножает текущую • glLoadIdentity(void) – загрузить единичную
Матричные преобразования • glRotate{fd}(T a, T x, T y, Tz) – вращение против часовой стрелки на угол a относительно оси (x, y, z) • glTranslate{fd}(T x, T y, Tz) – перенос на вектор (x, y, z) • glScale{fd}(T x, T y, Tz) – масштабирование по осям • Эффект выполнения в обратном порядке
Видовое преобразование • Видовое преобразование • Изменение положения камеры в пространстве • Модельное преобразование • Изменение положения модели в пространстве • Перемещение камеры = перемещение каждого объекта по отношению к фиксированной камере. Видовое преобразование эквивалентно нескольким модельным преобразованиям. • gluLookAt( eyex, eyey, eyez, aimx, aimy, aimz, upx, upy, upz)
Матрицы проекции • glOrtho(double l, double r, double b, double r, double n, double n) - задание ортографической проекции • glFrustum(double l, double r, double b, double r, double n, double n) — задание перспективной проекции • gluPerspective(double FOV, double aspect, double znear, double zfar) — задание перспективной проекции (в удобном виде)
Принципы освещения • Составляющие модели освещения OpenGL • Материал объекта определяет его своейста его поверхности • Цвет и положение источника света • Глобальные параметры освещения • рассеянный свет
Как устроено освещение? • Модель Фонга (закраска по Гуро) • Вычисляется на вершинах • Составляющие модели освещения • Свойства материала поверхности • Свойства источника света • Свойства модели освещения
Свойства материала • Определение свойств материала для примитива glMaterialfv (face, property, value) GL_DIFFUSE GL_SPECULAR GL_AMBIENT GL_EMISSION GL_SHININESS
Свойства источника света • glLightfv ( light, property, value ) • цвет источника • положение • затухание
Типы источников света • OpenGL поддерживает два типа источников света • Локальные (точечные) источники • Бесконечно удаленные (параллельные) источники • Типопределяется координатой w • w = 0 параллельный источник • W 0 точечный источник (x / w, y / w, z /w)
Определение текстурного изображения void glTexImage2D( GLenumtarget, GLintlevel, GLintinternalformat, GLsizeiwidth, GLsizeiheight, GLintborder, GLenumformat, GLenumtype, const GLvoid *pixels );
Параметры текстуры • void glTexParameterf( GLenumtarget,GLenumpname,GLfloatparam); • GL_TEXTURE_MIN_FILTER • GL_NEAREST • GL_LINEAR • GL_NEAREST_MIPMAP_NEAREST • GL_LINEAR_MIPMAP_LINEAR • GL_TEXTURE_MAG_FILTER • GL_TEXTURE_WRAP_[TS]
Текстурные объекты • void glGenTextures( GLsizein,GLuint *textures); - создать текстурный объект • void glDeleteTextures(GLsizein, const GLuint *textures); - удалить текстурный объект • void glBindTexture( GLenumtarget, GLuinttexture ); - связать текстурный объект
Пример • // Установка текстуры • glEnable(GL_TEXTURE_2D); • glGenTextures(1, &texture[0]); // Create The Texture • glBindTexture(GL_TEXTURE_2D, texture[0]); • glTexImage2D(GL_TEXTURE_2D, 0, 3, TextureImage[0]->sizeX, TextureImage[0]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE, TextureImage[0]->data); • glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR); • glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); • ..... • // Рисование • glBegin(GL_QUADS); • // Front Face • glTexCoord2f(0.0f, 0.0f); glVertex3f(-1.0f, -1.0f, 1.0f); • glTexCoord2f(1.0f, 0.0f); glVertex3f( 1.0f, -1.0f, 1.0f); • ... • glEnd();
Туман • void glFogf( GLenumpname,GLfloatparam); • GL_FOG_MODE • GL_FOG_DENSITY • GL_FOG_START • GL_FOG_END • GL_FOG_COLOR
Пофрагментные операции
Альфа-тест • Отбрасывает фрагменты, которые не проходят операцию сравнения • void glAlphaFunc( GLenumfunc,GLclampfref); • GL_NEVER • GL_LESS • GL_EQUAL • GL_LEQUAL • GL_GREATER • GL_NOTEQUAL • GL_GEQUAL • GL_ALWAYS
Смешивание • Комбинация приходящего фрагмента и фрагмента, находящегося в буфере кадра • void glBlendFunc( GLenumsfactor,GLenumdfactor);