Компьютерная визуализация Лекция №3 СПбГУ ИТМО 2004 Двойная буферизация glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE ); // включение режима двойной буферизации GL_BACK GL_FRONT void glDrawBuffer(GLenum mode); // выбор активного буфера glutSwapBuffers(); Получение параметров визуализации void glGetBooleanv(GLenum pname, GLboolean * params); void glGetDoublev(GLenum pname, GLdouble * params); void glGetFloatv(GLenum pname, GLfloat * params); void glGetIntegerv(GLenum pname, GLint * params); // получают значения параметра заданного константой pname GLint viewport[4]; glGetIntegerv(GL_VIEWPORT, viewport); // получает параметры порта вывода GLdouble modelMatrix[16]; glGetDoublev(GL_MODELVIEW_MATRIX , modelMatrix); // получает текущую видовую матрицу GLdouble projMatrix[16]; glGetDoublev(GL_PROJECTION_MATRIX, projMatrix); // получает текущую матрицу проекций Выполнение проекционных преобразований int gluProject(GLdouble objx, GLdouble objy, GLdouble objz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble * winx, GLdouble * winy, GLdouble * winz); // выполнение прямого преобразования int gluUnProject(GLdouble winx, GLdouble winy, GLdouble winz, const GLdouble modelMatrix[16], const GLdouble projMatrix[16], const GLint viewport[4], GLdouble * objx, GLdouble * objy, GLdouble * objz); // выполнение обратного преобразования // (objx, objy, objz) – видовая координата; // (winx, winy, winz) – координата окна; // modelMatrix – видовая матрица; // projMatrix – матрица проекций; // viewport – параметры порта вывода Отображение битовых примитивов void glBitmap(GLsizei width, GLsizei height, GLfloat xorig, GLfloat yorig, GLfloat xmove, GLfloat ymove, const GLubyte * bitmap); // отобразить битовый массив bitmap; // width, height – размеры битового изображения; // xorig, yorig – положение центра битового изображения; // xmove, ymove – смещение текущей позиции вывода растра после отображения; 0x10 0xC0 0x10 0xF0 0x38 0xFC 0x38 0xFF 0x7C 0xFC 0x7C 0xF0 0xFE 0xC0 0xFE glBitmap(8,7,7,3,0,0,h_mark); glBitmap(7,8,3,7,0,0,v_mark); Управление отображением битовых примитивов void glRasterPos2d(GLdouble x, GLdouble y); void glRasterPos3d(GLdouble x, GLdouble y, GLdouble z); // установка позиции вывода растра void glPixelStorei(GLenum pname, GLint param); void glPixelStoref(GLenum pname, GLfloat param); // определение режима распаковки битового массива // pname = GL_UNPACK_ALIGNMENT // param = 1 – для GLubyte = 2 – для GLushort = 4 – для GLuint (по умолчанию) = 8 – для GLfloat glPushAttrib(GL_CURRENT_BIT); // запомнить состояние параметров в стеке атрибутов glPopAttrib(); // восстановить состояние параметров из стека Отображение текстовых символов void glutBitmapCharacter(void *font, int character); // создание растрового шрифта // font – константа определяющая тип шрифта GLUT_BITMAP_8_BY_13 GLUT_BITMAP_9_BY_15 GLUT_BITMAP_TIMES_ROMAN_10 GLUT_BITMAP_TIMES_ROMAN_24 GLUT_BITMAP_HELVETICA_10 GLUT_BITMAP_HELVETICA_12 GLUT_BITMAP_HELVETICA_18 // character – код символа void glutStrokeCharacter(void *font, int character); // создание векторного шрифта // font – константа определяющая тип шрифта GLUT_STROKE_ROMAN GLUT_STROKE_MONO_ROMAN // character – код символа Отображение растровых примитивов void glDrawPixels(GLsizei width, GLsizei height, GLenum format, GLenum type, const GLvoid *pixels); // отображение растрового примитива pixels // width, heigth – размеры отображаемого растра // format – параметр отображения GL_COLOR_INDEX, GL_RGB, GL_RGBA GL_RED, GL_GREEN, GL_BLUE, GL_LUMINANCE // type – тип данных в массиве pixels GL_UNSIGNED_BYTE, GL_BYTE, GL_UNSIGNED_SHORT, GL_SHORT, GL_UNSIGNED_INT, GL_INT, GL_BITMAP, GL_FLOAT Преобразование диапазона значений void glPixelStoref(GLenum pname, GLfloat param); // определение режима преобразования диапазона значений // GL_RED_SCALE, GL_GREEN_SCALE, GL_BLUE_SCALE // GL_RED_BIAS, GL_GREEN_BIAS, GL_BLUE_BIAS N = X * SCALE + BIAS Цветовые преобразования glPixelTransferi(GL_MAP_COLOR, true); // включение режима цветовых преобразований glPixelTransferi(GL_MAP_COLOR, false); // выключение режима цветовых преобразований void glPixelMapfv(GLenum map, GLint mapsize, const GLfloat *values); // определение карты цветовых преобразований // map – тип карты GL_PIXEL_MAP_I_TO_R GL_PIXEL_MAP_I_TO_G GL_PIXEL_MAP_I_TO_B // mapsize – количество элементов в карте // values – массив новых значений цвета Цветовые преобразования B C G Y R 1 0.8 0.6 0.4 0.2 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1 Цветовые преобразования Отображение части растрового примитива glPixelStorei(GL_UNPACK_ROW_LENGTH, width); // установка количества элементов в строке glPixelStorei(GL_UNPACK_SKIP_ROWS, rows); // установка количества пропускаемых строк glPixelStorei(GL_UNPACK_SKIP_PIXELS, pixels); // установка количества пропускаемых пикселов