Лекция №3 Компьютерная визуализация СПбГУ ИТМО 2004

advertisement
Компьютерная визуализация
Лекция №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);
// установка количества пропускаемых пикселов
Download