ИСМ-06-2:

назад

6. а) Графическое программирование - Графический конвейер, стадии.

Раньше почти все приложения работы с графикой имели свой внутренний графический движок. Сейчас же появились специализированные графические библиотеки.

Конкретное приложение может обращаться напрямую через аппаратно-зависимый драйвер устройства или через графическую библиотеку. 
1) Приложение -> драйвер -> Устройство ввода/вывода.

2) Приложение -> Графическая б
иблиотека -> Драйвер -> Устройство ввода/вывода

Недостаток первого подхода – требуется поддержка большого количества видеокарт.

Графическая библиотека [3] представляет собой набор подпрограмм, предназначенных для решения определенных задач. Она основывается на командах драйвера устройства. Самые популярные графические библиотеки на сегодняшний день: DirectX от Microsoft и OpenGL, используемая в большинстве современных САПР.

 Основы графического программирования

OpenGL — Open Graphics Library, открытая графическая библиотека. Термин «открытый» означает независимый от производителей. Имеется спецификация (стандарт) на OpenGL, где все четко документировано и описано. Библиотеку OpenGL может производить кто угодно. Главное, чтобы библиотека удовлетворяла спецификации OpenGL и ряду тестов. Как следствие, в библиотеке нет никаких темных мест, секретов, недокументированных возможностей и т.п. Библиотеку выпускают такие корпорации, как Microsoft, Silicon Graphics.

Библиотека OpenGL представляет из себя интерфейс программирования трехмерной графики. Единицей информации является вершина, из них состоят более сложные объекты. Программист создает вершины, указывает как их соединять(линиями или многоугольниками), устанавливает координаты и  параметры камеры и ламп, а библиотека OpenGL берет на себя работу создания изображения на экране.

Операции с объектами осуществляются в трехмерном пространстве, описываемом матрицей, которую называют мировой матрицей. Помимо мировой матрицы требуется указать видовую матрицу, соответствующую позиции глаза наблюдателя и направлению, в котором он смотрит. Последняя матрица, которая нужна для получения проекции трехмерной сцены на экране, так и называется – матрицей проекции. Значения элементов этой матрицы задают правила, согласно которым будет осуществляться проецирование: положение задней и передней отсекающих плоскостей, искажения, имитирующие перспективу.

 

Объекты или части, находящиеся за пределами области видимости, на экран проецироваться не будут, и мы их не увидим.

Для получения реалистичных изображений должно быть выполнено три условия:


1) при описании примитивов задать нормали;

2) определить свойство материала;

3) включить источник света.

Нормали помогают системе рассчитать освещенность примитива при различном положении относительно источника света. Нормаль – это вектор, который задается к каждой из вершин примитива, и из требований оптимизации должен быть нормализован.

Кривая, отображаемая на экране, в действительности представляет собой набор коротких отрезков. Поэтому постоянно возникает необходимость вычислять координаты точек кривой, находящихся на равном расстоянии друг от друга. Это называется вычислением кривой.

 Перемещение, поворот, масштабирование

Любое движение (то есть преобразование пространства, сохраняющее расстояние между точками) в трехмерном пространстве, согласно теореме Шаля [17] , может быть представлено в виде суперпозиции поворота и параллельного переноса, то есть последовательного выполнения поворота и параллельного переноса. Именно поэтому основная часть информации о  поведении объекта — это его смещение, ось поворота и угол поворота.

Перенос точки с координатами (x,y,z) на вектор (dx,dy,dz) делается простым сложением всех координат. То есть результат — это (x+dx,y+dy,z+dz). Как бы сложили вектор-точку и вектор-перенос.

Поворот — занятие уже более интересное. Но тоже простое. Рассмотрим для примера поворот точки (x,y,z) относительно оси z. В  этом случае z не меняется вообще, а (x,y) меняются так же, как и при 2D повороте относительно начала координат.

Для трехмерного случая, таким образом

x’ = x*cos(alpha)-y*sin(alpha)
y’ = x*sin(alpha)+y*cos(alpha)
z’ = z

Почти во всех приложениях, использующих 3D-графику, используется матричный подход. Базовым элементом матричного метода является матрица размером 4x4. В математике для описания точки в пространстве используется четыре числа, вспомогательной характеристике можно придать любой смысл, это может быть, например, заряд частицы или материальная масса. В  графике четвертый компонент координаты точки называется W-координатой и предназначен для осуществления проекции точки на плоскость экрана. Это весовой фактор, на который умножаются координаты точки при ее проецировании. Его значение задается единичным.

Матрицы сдвига по осям X, Y и Z выглядят так:

  

Три матрицы сдвига можно объединить в одну, дающую возможность осуществлять сдвиг одновременно по нескольким осям. Последняя строка такой матрицы имеет ненулевые значения в столбцах, соответствующих нужным осям.

Аналогично сдвигу, операции поворота описываются матрицами. Для поворота на угол a вокруг оси X вектор координат вершины надо умножить на такую матрицу:


Повороты вокруг Y и Z соответственно на углы b и g :


Если необходимо изменить масштаб изображения, то необходимо задать матрицу масштабирования:


Таким образом, получаем следующее. Любое нужное нам преобразование пространства  получается произведением нужных матриц. При этом, важен порядок, в котором мы перемножаем матрицы, он определяет последовательность трансформаций системы координат.

 Графический конвейер

В большинстве подсистем трехмерной графики применяется графический конвейер [3].  Конвейер — это логическая группа вычислений, выполняемых последовательно, которые дают на выходе синтезируемую сцену.

 

Конвейер разделен на множество этапов, на каждом из которых аппаратно или программно выполняется некоторая функция. Наличием переходов между этапами конвейера обеспечивается возможность выбора между программной и аппаратной реализацией очередного этапа. Такой подход к настройке конвейера позволяет приложениям трехмерной графики получать преимущества аппаратной реализации, когда таковая доступна. Таким образом, реализация конвейера может чисто программной, полностью аппаратной или смешанной (программно-аппаратной). 

Описание сцены

До начала работы геометрических преобразований необходимо описать трехмерную сцену [7], изображение которой необходимо синтезировать.  Трехмерное приложение оперирует объектами, описанными в некоторой глобальной системе координат. Чаще всего здесь используется ортогональная (декартова) система координат, в которой положение каждой точки задается ее расстоянием от начала координат по трем взаимно перпендикулярным осям X, Y и Z.

Каждая сцена представляет собой следующее:

набор объектов

набор источников света

набор текстур

набор камер (хотя обычно используется одна)

Каждый объект задается следующим:

Набор вершин

Вершина определяется своими 3D координатами и соответствующими ей координатами в  текстуре.

Набор граней

Грань определяется тремя вершинами и текстурой (вообще говоря, не текстурой, а  материалом: кроме текстуры могут быть заданы, например, коэффициенты рассеивания и отражения света).

Поведение объекта

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

Каждый источник света задается следующим:

положение

ориентация (точка, в которую направлен этот источник, target)

тип (фоновый/направленный/ненаправленный)

цвет (обычно RGB)

 Стадия геометрических преобразований

 Стадия геометрических преобразований состоит из четырех этапов [3]. 

Первый этап заключается в описании каждого объекта группой треугольников (многоугольников), т.е. так называемый этап «триангуляции». Треугольники формируются на основе множества вершин, заданных приложением. Объекты, сконструированные из треугольников или многоугольников, называются каркасной (проволочной) моделью (рис. 8).


Рис. 8. Проволочная модель.

На втором этапе выполняются модельные преобразования, такие как перенос, вращение и изменение масштаба. Преобразования позволяют перемещать объекты в сцене. (Анимация движения/масштабирования объектов)

На третьем этапе выбираются модели освещения и  вычисляется освещенность объектов. Модель освещения описывает тип используемых источников света и затем, когда определены свойства освещаемого объекта, формируется эффект освещения. Общепринятые модели освещения включают рассеянный свет, направленный и точечный источники света. Отражающие свойства материала в  сочетании с моделью освещения задают цвет объекта.

Завершает стадию геометрических преобразований этап установки. На этапе установки изменяются размеры треугольников в зависимости от положения точки наблюдения сцены. Также удаляются невидимые грани.

Стадия геометрических преобразований требует выполнения большого объема вычислительных операций, включая операции с  плавающей точкой.

 Стадия рендеринга

Рендеринг — это процесс преобразования объекта или сцены, созданных в приложении трехмерной графики, для вывода на экран монитора, который представляет собой двухмерную плоскость [3]. На стадии рендеринга по описанию треугольников генерируются пиксели изображения. В отличие от механизма геометрических преобразований в процессе рендеринга объем операций с плавающей точкой не столь велик и в основном состоит из простых операций над пикселями.

Этапы стадии рендеринга:

Первый этап: сортировка по Z-буферу (так называемый «буфер глубины») и смешение текстур.

Второй этап на стадии рендеринга состоит в наложении текстурной карты на объект.

Третий этап стадии рендеринга состоит в закраске треугольников. Для выполнения этой задачи используются три модели: плоское закрашивание (по Ламберту) и закрашивание по Гуро и по Фонгу. Модель с плоским закрашиванием заключается в равномерном однородном закрашивании каждого треугольника одним цветом (обычная заливка). В результате объект предстает как множество плоских граней.

 

Рис. 9. Закрашивание

В процедурах закрашивания по Гуро и по Фонгу цвет интерполируется относительно границ треугольника, что приводит к более реалистичной и непрерывной закраске объекта. Закрашивание по Фонгу дает более реалистичный результат, чем закрашивание по Гуро, но требует более интенсивных вычислений

На заключительном этапе рендеринга применяется алгоритм сглаживания (антиалайзинг) для устранения эффекта дискретизации, ступенчатости изображения на границе объектов.

 Системы координат

Для вывода изображения на экран графического устройства необходимо решить две основные задачи:
1. указать положение всех точек объекта в пространстве

2. определить положение их образов на мониторе

Для задания положения точек в пространстве и на мониторе используются взаимосвязанные системы координат.

Первая система координат – виртуальная система координат устройства, определяющая положение точки на экране (состоит из горизонтальной и вертикальной оси).

Внешняя система координат (мировая), система координат модели (связана со всеми геометрическими характеристиками трехмерного объекта), система координат наблюдателя.

Виды проекций: перспективная и параллельная.


В перспективной проекции все точки рассматриваемого объекта соединяются с центром проекции, который обычно лежит на линии, соединяющей эту точку зрения и цель.

В параллельной проекции линии от всех точек объектапроводятся в направлении наблюдателя параллельно направлению наблюдения, а точки пересечения этих линий с экраном формируют проекцию.

Процедура расчета точек проекции с использованием матриц преобразования выглядит следующим образом.

 

Схема преобразований между системами координат

 

Графические примитивы

Примитивы – это элементы графики, которые могут отображаться графической библиотекой.

(ЕЩЕ ТУТ НАДО РАССКАЗАТЬ ПРО ОБЩИЙ АЛГОРИТМА ИНИЦИАЛИЗАЦИИ OPENGL)

[редактировать]

назад

© ism-06-2.ru