Визуализация в научных исследованиях. Ечкина Е.Ю - 48 стр.

UptoLike

Рубрика: 

Е. Ю. Ечкина, С. Б. Базаров, И. Н. Иновенков «Визуализация в научных исследованиях»
Кафедра АНИ факультета ВМК МГУ имени М. В. Ломоносова 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