Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
otvety_grafika.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
2.57 Mб
Скачать

32. Графическая библиотека OpenGl. Системы координат. Модельно-видовые преобразования. Примеры

В OpenGL используются как основные три системы координат: левосторонняя, правосторонняя и оконная. Первые две системы являются трехмерными и отличаются друг от друга направлением оси Z: в правосторонней она направлена на наблюдателя, в левосторонней – в глубину экрана. Ось X направлена вправо относительно наблюдателя, ось Y – вверх.

Рассматривая какой-либо трехмерный объект, мы всегда определяем его по­ложение и размеры относительно некоторой привычной, и удобной в на­стоящий момент системы координат, связанной с реальным миром. Такая исходная система координат в компьютерной графике является правосто­ронней и называется мировой системой координат (МСК). В ней над объектами выполняются заданные действия, например аффинные преобразования. Для того чтобы можно было изобразить объект на экране, его необходимо предварительно перевес­ти (или преобразовать) в другую систему координат, которая связана с точ­кой наблюдения и носит название видовой системы координат или системой координат наблюдателя (СКН). Эта система координат является левосторонней. В ней рассчитываются цвета объектов и выполняются заданные отсечения. Далее, координаты СКН переводятся в нормированные (нормализованные) координаты (НК), которые лежат в диапазоне [ -1, 1 ]. И, наконец, любое трехмерное изображение мы всегда рисуем на двумерном экране, который имеет свою экранную (оконную) систему координат (ОСК).

Модельно-видовые преобразования

К модельно-видовым преобразованиям будем относить перенос, поворот и изменение масштаба вдоль координатных осей. Для проведения этих операций достаточно умножить на соответствующую матрицу каждую вершину объекта и получить измененные координаты этой вершины:

где M – матрица модельно-видового преобразования. Перспективное преобразование и проектирование производится аналогично. Сама матрица может быть создана с помощью следующих команд:

void glTranslate[f d] (GLtype x, GLtype y, GLtype z),

void glRotate[f d] (GLtype angle, GLtype x, GLtype y, GLtype z) ,

void glScale[f d] (GLtype x, GLtype y, GLtype z).

33. Графическая библиотека OpenGl. Проекции. Область вывода. Создание анимации. Примеры

OpenGL поддерживает два вида прекций – ортографическую (параллельную) и перспективную проекции.

В OpenGL существуют стандартные команды для задания ортографической (параллельной) и перспективной проекций, выполнение которых устанавливает в системе координат наблюдателя область видимости графических данных.

Первый тип проекции может быть задан командами:

void glOrtho (GLdouble x_left, GLdouble x_right, GLdouble y_bottom, GLdouble y_top, GLdouble z_near, GLdouble z_far)

void gluOrtho2D (GLdouble x_left, GLdouble x_right, GLdouble y_bottom, GLdouble y_top)

При использовании ортографической проекции в качестве области видимости необходимо определить усеченный объем видимости (параллелепипед видимости).

При использовании перспективной проекции в качестве области видимости необходимо определить не параллелепипед, а усеченную пирамиду. Для этого в OpenGL реализованы две команды:

void glFrustrum(GLdouble left, GLdouble right, GLdouble top, GLdouble bottom, GLdouble znear, GLdouble zfar)

void gluPerspective (GLdouble angley, GLdouble aspect, GLdouble znear, GLdouble zfar).

Область вывода представляет собой прямоугольник в оконной системе координат, размеры которого задаются командой:

void glViewPort (GLint x, GLint y, GLint width, GLint height)

Значения всех параметров задаются в пикселах. Параметры x и y определяют координаты левого нижнего угла прямоугольника вывода в оконной системе координат (видовой порт) и по умолчанию принимаются равными нулю. Размеры оконной системы координат определяются текущими размерами окна приложения, точка (0,0) находится в левом нижнем углу окна.

Создание анимации.

Для создания анимации в OpenGL необходимо выпонить следующие действия.

  1. Установить режим двойной буферизации

glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE)

  1. Зарегистрировать и создать функцию обратного вызова (например функцию с именем IdleFunction), которая вызывается системой когда нет других событий.

Внутри функции IdleFunction описываются действия, которые влияют на вид изображения после перерисовки окна. Например, изменяется угол поворота объекта. glutPostRedisplay( ); // Обновить окно. В функции рисования OnDraw( ) использовать команду переключения буферов – glutSwapBuffers().

Для управления процессом запуска и остановки анимации можно использовать:

glutIdleFunc(IdleFunction) – разрешает выполнение функции IdleFunction;

glutIdleFunc(NULL) – блокирует выполнение функции IdleFunction.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]