ВУЗ:
Составители:
Рубрика:
Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях»
Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su
48
Преобразования координат и проекции
В OpenGL используются как основные три системы координат: левосторонняя,
правосторонняя и оконная. Первые две системы являются трехмерными и отличаются
друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а
в левосторонней – в глубь экрана. Расположение осей x и y аналогично описанному
выше. Левосторонняя система используется для задания значений параметрам
команды gluPerspective(), glOrtho(), которые будут рассмотрены ниже, а
правосторонняя или мировая система координат во всех остальных случаях.
Отображение трехмерной информации происходит в двумерную оконную систему
координат.
Для задания различных преобразований объектов сцены в OpenGL используются
операции над матрицами, при этом различают три типа матриц: видовая, проекций и
текстуры. Все они имеют размер 4x4. Видовая матрица определяет преобразования
объекта в мировых координатах, такие как параллельный перенос, изменение
масштаба и поворот. Матрица проекций задает как будут проецироваться трехмерные
объекты на плоскость экрана (в оконные координаты), а матрица текстуры определяет
наложение текстуры на объект.
Для того, чтобы выбрать, какую матрицу надо изменить, используется команда
void glMatrixMode(GLenum mode)
вызов которой со значением параметра mode равным GL_MODELVIEW,
GL_PROJECTION, GL_TEXTURE включает режим работы с видовой, проекций и
матрицей текстуры соответственно. Для вызова команд, задающих матрицы того или
иного типа необходимо сначала установить соответствующий режим.
Для определения элементов матрицы текущего типа вызывается команда
void glLoadMatrix[f d](GLtype *m)
где m указывает на массив из 16 элементов типа float или double в соответствии с
названием команды, при этом сначала в нем должен быть записан первый столбец
матрицы, затем второй, третий и четвертый.
Команда
void glLoadIdentity(void)
заменяет текущую матрицу на единичную. Часто нужно сохранить содержимое
текущей матрицы для дальнейшего использования, для чего используют команды
void glPushMatrix(void)
void glPopMatrix(void)
Они записывают и восстанавливают текущую матрицу из стека, причем для каждого
типа матриц стек свой. Для видовых матриц его глубина равна как минимум 32, а для
двух оставшихся типов как минимум 2.
Для умножения текущей матрицы слева на другую матрицу используется команда
void glMultMatrix[f d](GLtype *m)
где m должен задавать матрицу размером 4x4 в виде массива с описанным
расположением данных. Однако обычно для изменения матрицы того или иного типа
удобно использовать специальные команды, которые по значениям своих параметров
создают нужную матрицу и перемножают ее с текущей. Чтобы сделать текущей
созданную матрицу, надо перед вызовом этой команды вызвать glLoadIdentity().
Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях» Преобразования координат и проекции В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси z: в правосторонней она направлена на наблюдателя, а в левосторонней – в глубь экрана. Расположение осей x и y аналогично описанному выше. Левосторонняя система используется для задания значений параметрам команды gluPerspective(), glOrtho(), которые будут рассмотрены ниже, а правосторонняя или мировая система координат во всех остальных случаях. Отображение трехмерной информации происходит в двумерную оконную систему координат. Для задания различных преобразований объектов сцены в OpenGL используются операции над матрицами, при этом различают три типа матриц: видовая, проекций и текстуры. Все они имеют размер 4x4. Видовая матрица определяет преобразования объекта в мировых координатах, такие как параллельный перенос, изменение масштаба и поворот. Матрица проекций задает как будут проецироваться трехмерные объекты на плоскость экрана (в оконные координаты), а матрица текстуры определяет наложение текстуры на объект. Для того, чтобы выбрать, какую матрицу надо изменить, используется команда void glMatrixMode(GLenum mode) вызов которой со значением параметра mode равным GL_MODELVIEW, GL_PROJECTION, GL_TEXTURE включает режим работы с видовой, проекций и матрицей текстуры соответственно. Для вызова команд, задающих матрицы того или иного типа необходимо сначала установить соответствующий режим. Для определения элементов матрицы текущего типа вызывается команда void glLoadMatrix[f d](GLtype *m) где m указывает на массив из 16 элементов типа float или double в соответствии с названием команды, при этом сначала в нем должен быть записан первый столбец матрицы, затем второй, третий и четвертый. Команда void glLoadIdentity(void) заменяет текущую матрицу на единичную. Часто нужно сохранить содержимое текущей матрицы для дальнейшего использования, для чего используют команды void glPushMatrix(void) void glPopMatrix(void) Они записывают и восстанавливают текущую матрицу из стека, причем для каждого типа матриц стек свой. Для видовых матриц его глубина равна как минимум 32, а для двух оставшихся типов как минимум 2. Для умножения текущей матрицы слева на другую матрицу используется команда void glMultMatrix[f d](GLtype *m) где m должен задавать матрицу размером 4x4 в виде массива с описанным расположением данных. Однако обычно для изменения матрицы того или иного типа удобно использовать специальные команды, которые по значениям своих параметров создают нужную матрицу и перемножают ее с текущей. Чтобы сделать текущей созданную матрицу, надо перед вызовом этой команды вызвать glLoadIdentity(). Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова http://ani.cs.msu.su 48
Страницы
- « первая
- ‹ предыдущая
- …
- 46
- 47
- 48
- 49
- 50
- …
- следующая ›
- последняя »