Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемЛев Томилов
1 Компьютерная графика. Лекция 4 Алгоритмы формирования изображений. Основы OpenGL
2 Основные задачи отображения В любой системе отображения геометрических объектов по мере обработки информации решаются четыре основные задачи: моделирование; геометрическая обработка; преобразование в растр; отображение (визуализация). Компьютерная графика. Лекция 4
3 Моделирование Результатом решения задачи моделирования является множество вершин, однозначно определяющих набор геометрических объектов тех типов, которые поддерживаются программными и аппаратными средствами конкретной графической системы. Компьютерная графика. Лекция 4
4 Геометрическая обработка Цель геометрической обработки – определить, какие геометрические объекты подлежат отображению, и сформировать степень почернения или оттенок цвета этих объектов. Компьютерная графика. Лекция 4
5 Реализация геометрических преобразований базируется на математическом аппарате однородных координат. Используются пять систем координат: система координат объектов (мировая); система координат наблюдателя (камеры); система координат отсечения; нормализованная система координат устройства отображения; система координат окна приложения. Компьютерная графика. Лекция 4 Системы координат
6 В процессе перехода от одной системы координат к другой над объектом выполняются следующие преобразования: проективное преобразование; нормализация; ортогональное проецирование; отсечение. Для выполнения преобразований используются следующие алгоритмы: Коэна-Сазерленда; Лиана-Барского; z-буфера; построчного сканирования; Брезенхэма. Компьютерная графика. Лекция 4 Преобразования объектов
7 Проективное преобразование Проективное преобразование - преобразование трехмерной сцены в двумерное изображение на картинной плоскости. После выполнения проективного преобразования графическая система имеет дело только с двумерными объектами. Эти объекты описаны в системе координат экрана и представлены только характерными точками – вершинами например, после проецирования трехмерный прямолинейный отрезок становится двухмерным, представленным парой двухмерных вершин. Компьютерная графика. Лекция 4
8 Для вывода изображения отрезка на экран необходимо сформировать на основе координат вершин последовательность точек растра – пикселей. Процесс формирования промежуточных точек графического образа объекта и составляет суть растрового преобразования. Растровое преобразование Компьютерная графика. Лекция 4
9 Визуализация в общем смысле метод представления информации в виде оптического изображения (например, в виде рисунков и фотографий, графиков, диаграмм, структурных схем, таблиц, карт и т. д.). Термин рендеринг является синонимом слова визуализация. Часто в компьютерной графике (художественной и технической) под рендерингом понимают создание плоского изображения (картинки) по разработанной 3D-сцене. Визуализация Компьютерная графика. Лекция 4
10 Примеры визуализации Компьютерная графика. Лекция 4 Рисунок, видимо, был первой в мире сознательной попыткой визуализации образов, для их демонстрации другому человеку. Графики предназначены для иллюстрирования математических понятий, функциональных зависимостей или связей между объектами (теория графов). Диаграммы позволяют иллюстрировать количественные соотношения в определённой области.
11 Процесс визуализации делится на две стадии: на первой стадии используется матрица вида, которая задает преобразование между мировым фреймом и фреймом камеры; по типу проекции и части мирового пространства, которая преобразуется в изображение, формируется матрица проецирования, которая объединяется с матрицей вида. Стадии визуализации Компьютерная графика. Лекция 4
12 Виды проекций Существует множество проекций для формирования матрицы проецирования. Рассмотрим следующие: ортографические проекции; аксонометрические проекции; косоугольные проекции. Компьютерная графика. Лекция 4
13 Ортографические проекции Компьютерная графика. Лекция 4 При построении всех ортогональных видов проецирующие лучи перпендикулярны картинной плоскости.
14 Аксонометрические проекции В аксонометрических проекциях проецирующие лучи ортогональны картинной плоскости, но сама картинная плоскость может иметь любую ориентацию относительно объекта. Если картинная плоскость ориентирована симметрично по отношению к трем главным граням, пересекающимся в одном углу прямоугольного объекта, то образуется изометрическая проекция. Если картинная плоскость ориентирована симметрично по отношению к двум главным граням, то образуется диметрическая проекция. Общий случай – триметрическая проекция. Компьютерная графика. Лекция 4
15 Косоугольные проекции Косоугольная проекция является параллельной проекцией общего вида. При построении косоугольной проекции не накладываются никакие ограничения на угол между проецирующими лучами и картинной плоскостью. Компьютерная графика. Лекция 4
16 Операции с изображением на уровне растрового представления При построении образа поверхности его можно разбить на мелкие фрагменты, каждый из которых имеет размер, не превышающий размер пикселя экрана. То, что размер фрагмента меньше одного пикселя, позволяет объединять образы нескольких поверхностей, каждый из которых вносит свой вклад в засветку пикселя (его цвет). При формировании окончательного изображения нужно назначить тон или цвет каждому фрагменту. Компьютерная графика. Лекция 4
17 Алгоритм наложения можно рассматривать: как алгоритм модификации параметров модели закрашивания, который опирается на некоторый двухмерный массив данных – карту (тар); как алгоритм модификации параметров поверхности, обрабатываемой алгоритмом закрашивания, например свойств материала или направления нормали. В рамках этого подхода можно выделить: наложение проективной текстуры; наложение микрорельефа; наложение параметров среды. Компьютерная графика. Лекция 4 Алгоритмы наложения
18 Компьютерная графика. Лекция 4 OpenGL Широко распространенный графический API для программирования 2D и 3D графики Разработан в 1992 году фирмой Silicon Graphics Выступает в качестве стандартного и стабильного API на многих программно- аппаратных платформах Спецификация, описывающая набор функций и их точное поведение Производители оборудования создают реализации библиотеки согласно данной спецификации
19 Компьютерная графика. Лекция 4 Достоинства Промышленный стандарт Стабильность Надежность и переносимость Современность Масштабируемость Легкость в изучении и использовании Хорошо документирован Независим от языка программирования
20 Компьютерная графика. Лекция 4 Место OpenGL в приложении Программа-приложение Службы операционной системы GDI Службы ввода-вывода OpenGL Устройство отображения Программа растеризации
21 Компьютерная графика. Лекция 4 OpenGL с аппаратным ускорением Программа-приложение Службы операционной системы GDI Службы ввода-вывода OpenGL Устройство отображения Аппаратный драйвер
22 Компьютерная графика. Лекция 4 Базовые возможности Рисование геометрических примитивов (точки, линии, многоугольники) Рисование сложных объектов реализуется силами программиста либо сторонними библиотеками Работа с растровыми примитивами Цветовые режимы RGBA / Index Видовые и модельные преобразования Прозрачность Удаление невидимых линий и поверхностей B-сплайны Наложение текстуры Интерполяция цветов, Anti-aliasing, туман Использование списков изображений (display lists)
23 Компьютерная графика. Лекция 4 Основы Ориентированность главным образом на построение изображения в буфере кадра (Frame Buffer) и чтение из него Основное назначение OpenGL - интерактивная визуализация трехмерных сцен
24 Компьютерная графика. Лекция 4 Библиотека OpenGL Графическая библиотека OpenGL позволяет рисовать графические примитивы в различных режимах Примитивами являются точки, отрезки прямых, многоугольники или растровые прямоугольники Переключение режимов рисования, отображение примитивов и другие операции GL описываются при помощи вызовов процедур и функций
25 Компьютерная графика. Лекция 4 Примитивы OpenGL Примитивы задаются при помощи групп из одной или более вершин Каждая вершина определяет точку, конец отрезка прямой или вершину многоугольника Атрибуты вершины (позиция, нормаль, цвет, текстурные координаты и т.п.) – набор свойств, ассоциированных с вершиной В версии OpenGL 3.0 убраны все встроенные атрибуты вершин и функции по их установке Каждая вершина обрабатывается независимо от других и одним и тем же образом. При отсечении примитивов могут создаваться дополнительные вершины Значения атрибутов при этом интерполируются с учетом перспективы
26 Компьютерная графика. Лекция 4 Пример 1 2 3
27 Компьютерная графика. Лекция 4 Команды OpenGL Взаимодействие приложения с OpenGL происходит посредством отдачи команд Команда – вызов определенной функции библиотеки Команды всегда выполняются в порядке их получения Выборка данных, необходимых для выполнения команды происходит в момент вызова команды Актуально при передаче массивов в качестве аргументов команд
28 Компьютерная графика. Лекция 4 Команды OpenGL Возможна некоторая задержка между вызовом команды и отображением результата команда glFinish() вызывает немедленное выполнение команд и дожидается завершения их выполнения команда glFlush() вызывает немедленное выполнение команд, но не дожидается завершения их выполнения
29 Компьютерная графика. Лекция 4 Парадигма glBegin()/glEnd() Большинство геометрических примитивов OpenGL отображаются при помощи перечисления их вершин между «командными скобками» glBegin() и glEnd() При выполнении команды glVertex* происходит создание новой вершины внутри примитива с текущими атрибутами вершины на момент выполнения команды glVertex* Данная парадигма объявлена устаревшей из за своей низкой производительности в версии OpenGL 3.0 и более не поддерживается
30 Компьютерная графика. Лекция 4 Пример: рисование линий float x0 = 0; float y0 = 0; glBegin(GL_LINES); for (int angle = 0; angle < 360; angle += 3) { float angleInRadians = (float)(angle * M_PI / 180.0f); float x1 = cosf(angleInRadians); float y1 = sinf(angleInRadians); glVertex2f(x0, y0); glVertex2f(x1, y1); } glEnd();
31 Компьютерная графика. Лекция 4 Результат
32 Компьютерная графика. Лекция 4 Примитивы OpenGL Примитив – это фигура (точка, линия, многоугольник, прямоугольник пикселей, или битовый массив), которая рисуется, хранится и которой манипулируют как единой дискретной сущностью из примитивов строятся геометрические объекты любой степени сложности примитивы определяются группами из одной или нескольких вершин, с каждой из которых ассоциирован определенный набор атрибутов
33 Компьютерная графика. Лекция 4 Вершины Вершины используются для задания основных примитивов OpenGL. могут иметь размерность от 1 до 4 координат задаются при помощи glVertex* в момент обработки команды glVertex OpenGL создает вершину с текущими атрибутами вершины
34 Компьютерная графика. Лекция 4 Атрибуты вершин Текущий цвет вместе с условиями освещения определяет результирующий цвет вершины Текущая позиция растра (при работе с пикселями и битовыми массивами) Текущая нормаль Вектор нормали, ассоциированный с вершиной, задает ориентацию содержащей ее поверхности в трехмерном пространстве Текущие координаты текстуры Местоположение в карте текстуры (texture map), ассоциированное с вершиной В OpenGL 3.0 встроенные атрибуты вершин объявлены устаревшими
35 Компьютерная графика. Лекция 4 Нормаль Одним из атрибутов вершины в OpenGL является вектор нормали к поверхности в точке вершины направлен перпендикулярно поверхности, проходящей через текущую вершину OpenGL использует нормали для расчета освещенности граней текущий вектор нормали задается при помощи функций glNormal
36 Компьютерная графика. Лекция 4 Задание нормалей вершин для объекта с плоскими гранями
37 Компьютерная графика. Лекция 4 Задание нормалей вершин примитивов, аппроксимирующих криволинейную поверхность
38 Компьютерная графика. Лекция 4 Рисование примитивов Примитив, или группа однотипных примитивов определяются путем объявления их вершин внутри командных скобок glBegin/glEnd void glBegin(GLenum mode) void glEnd() mode – тип примитивов glBegin(GL_TRIANGLES); glVertex2f(3.0f, 0.0f); glVertex2f(0.0f, 0.0f); glVertex2f(2.2f, 3.0f); … glEnd();
39 Компьютерная графика. Лекция 4 Типы геометрических примитивов OpenGL
40 Компьютерная графика. Лекция 4 Клиент-серверная интерпретация команд Приложение (Клиент) вызывает команды, обрабатываемые OpenGL (Сервер) Сервер может работать с несколькими различными контекстами контекст хранит состояние OpenGL команды в один момент времени работают с текущим контекстом клиент может переключаться с одного контекста на другой при помощи специальных команд
41 Компьютерная графика. Лекция 4 Низкоуровневой доступ OpenGL предоставляет доступ к низкоуровневым графическим операциям изменить режим установить заданный параметр нарисовать группу примитивов Описание сложных 3d и 2d-объектов и сцен – забота программиста, а не библиотеки
42 Компьютерная графика. Лекция 4 Оконная система OpenGL осуществляет графический вывод в буфер кадра Отображение буфера кадра на экране монитора не входит в обязанности OpenGL Изначально OpenGL был спроектирован как аппаратно- независимая графическая библиотека Управлением буфером кадра и его отображением на экране монитора занимается оконная система WGL – Microsoft Windows GLX – Unix/Linux GLUT – мультиплатформенная библиотека Скрывает особенности различных оконных систем за единым API (пусть даже с ограниченным функционалом)
43 Компьютерная графика. Лекция 4 Типы данных OpenGL Функции OpenGL работают с аргументами определенного типа Целые, числа с плавающей точкой Размер одного и того же типа в различных системах может варьироваться Рекомендуется использовать встроенные типы OpenGL Функции OpenGL, способные работать с несколькими типами данных имеют в составе своего имени суффиксы
44 Компьютерная графика. Лекция 4 Суффиксы команд и типы данных аргументов СуффиксТип данныхОбычный тип языков C/C++ Тип OpenGL b8-битное целое со знакомsigned charGLbyte s16-битное целое со знакомshortGLshort i32-битное целое со знакомint или longGLint f32-битное вещественное (одинарной точности) floatGLfloat, GLclampf d64-битное вещественное (двойной точности) doubleGLdouble, GLclampd ub8-битное целое без знакаunsigned charGLubyte, GLboolean us16-битное целое без знакаunsigned shortGLushort ui32-битное целое без знакаunsigned int или unsigned long GLuint, GLenum, GLbitfield
45 Компьютерная графика. Лекция 4 Пример void DrawDot(GLint x, GLint y) { glBegin(GL_POINTS); glVertex2i(x, y); glEnd(); }
46 Компьютерная графика. Лекция 4 Состояние OpenGL (OpenGL state) OpenGL с точки зрения спецификации – конечный автомат, управляющий набором определенных графических операций Состояние OpenGL описывается множеством переменных состояния (state variables) текущий цвет текущая нормаль текущий размер точки текущие координаты текстуры и т.п. Значения переменных состояния изменяются при помощи команд OpenGL В версии OpenGL 3.0 произошел практически полный отказ от архитектуры конечного автомата
47 Компьютерная графика. Лекция 4 Два типа состояния OpenGL Состояние сервера с каждым контекстом OpenGL связан полный набор переменных состояния сервера к данному типу относится б о льшая часть переменных OpenGL Состояние клиента определяется набором переменных состояния клиента каждое соединение клиента с сервером заключает в себе полный набор переменных состояния клиента и сервера
48 Компьютерная графика. Лекция 4 Синтаксис команд OpenGL Команды OpenGL – функции или процедуры Группы команд выполняют одну операцию, однако используют разные типы и количество аргументов, например: glVertex* glColor* glTranslate*
49 Компьютерная графика. Лекция 4 Форма записи команд OpenGL Команды OpenGL имеют следующий синтаксис: rtype CommandName [ ][b s i f d ub us ui][v] ( [args,] T arg1,..., T arg N [, args] ); rtype - тип, возвращаемый функцией OpenGL CommandName - имя функции, например glVertex [ ] – количество аргументов команды, например, разрядность координатного вектора [b s i f d ub us ui] - тип аргументов команды [v] - если присутствует, то в качестве аргумента команды выступает указатель на массив значений
50 Компьютерная графика. Лекция 4 Примеры: glVertex2f(GLfloat x, GLfloat y) glNormald(GLdouble x, GLdouble y, GLdouble z) glColor4ub(GLubyte r, GLubyte g, GLubyte b, GLubyte a) glClearColor(GLclampf r, GLclampf g, GLclampf b, GLclampf a) glVertex3fv(GLfloat *v) glTranslatef(GLfloat x, GLfloat y, GLfloat z) glFlush() glClear(GLbitfield mask) glScalefv(GLfloat *v)
51 Компьютерная графика. Лекция 4 Буфер кадра OpenGL Буфер кадра состоит из нескольких буферов, каждый из которых хранит определенную информацию о фрагментах изображения: буфер цвета буфер глубины буфер трафарета
52 Компьютерная графика. Лекция 4 Конвейер OpenGL Буфер команд OpenGL Растеризация Преобразование и освещение Буфер кадра Вызовы программного интерфейса OpenGL
53 Компьютерная графика. Лекция 4 Преобразования координат Координаты вершин, передаваемых при помощи функций glVertex* и ей подобных обычно задаются в системе координат объекта В ходе обработки вершин OpenGL выполняет последовательность обязательных преобразований каждой вершины при помощи соответствующих матриц Использование вершинных шейдеров позволяет изменить часть этапов на свои собственные
54 Компьютерная графика. Лекция 4 Матрицы в OpenGL OpenGL в ходе своей работы использует следующие типы матриц: матрица моделирования/вида (ModelView matrix) матрица проецирования (Projection matrix) матрица текстуры (Texture matrix) матрица цвета (Color matrix) Значения данных матриц могут быть заданы при помощи определенных команд OpenGL
55 Компьютерная графика. Лекция 4 Выбор текущей матрицы OpenGL в один момент времени работает только с одной текущей матрицей Для выбора текущей матрицы служит команда void glMatrixMode(GLenum mode) где mode – одно из значений GL_MODELVIEW GL_PROJECTION GL_TEXTURE
56 Компьютерная графика. Лекция 4 Загрузка и изменение текущей матрицы glLoadMatrix Заменяет текущую матрицу на определенную пользователем glMultMatrix Заменяет текущую матрицу С результатом ее умножения на матрицу M С = C M OpenGL хранит элементы матриц не построчно, а по столбцам:
57 Компьютерная графика. Лекция 4 Загрузка единичной матрицы glLoadIdentity() заменяет текущую матрицу на единичную
58 Компьютерная графика. Лекция 4 Применение аффинных преобразований Данные функции позволяют осуществлять аффинные преобразования в трехмерном пространстве Результатом вызова данных команд будет умножение текущей матрицы на матрицу одного из аффинных преобразований glTranslate* glScale* glRotate* В OpenGL 3.0 данные функции объявлены устаревшими
59 Компьютерная графика. Лекция 4 Матрицы проецирования Умножают текущую матрицу на матрицу проецирования glOrtho – ортографическое преобразование glFrustum – перспективное преобразование См. также: gluPerspective gluOrtho2D
60 Компьютерная графика. Лекция 4 Стек матриц Стек матриц позволяет запомнить и в последствии восстановить текущую матрицу void glPushMatrix() – запомнить текущую матрицу в стеке void glPopMatrix() – восстановить запомненную матрицу из стека Матрицы каждого типа имеют свой собственный стек определенной глубины
61 Компьютерная графика. Лекция 4 Матрица моделирования-вида (Model-View Matrix) OpenGL преобразовывает координаты каждой вершины из системы координат объекта в систему координат наблюдателя при помощи матрицы моделирования-вида
62 Компьютерная графика. Лекция 4 Матрица проецирования (Projection matrix) Матрица проецирования применяется к системе координат наблюдателя, преобразуя вершины в систему координат отсечения (clip coordinates)
63 Компьютерная графика. Лекция 4 Перспективное деление Перспективное деление переводит вершину в нормализованную систему координат устройства Отображаемый объем при этом трансформируется в куб со сторонами, параллельными осям координат, располагающийся в диапазоне от -1 до +1
64 Компьютерная графика. Лекция 4 Преобразование в порт просмотра (viewport transformation) Порт просмотра – прямоугольная область окна, в которой происходит отображение видового объема сцены Преобразование в порт просмотра позволяет получить координаты вершин в оконных координатах устройства (в пикселях) Значение глубины фрагмента приводится к диапазону [0;1] (или к задаваемому пользователем)
65 Компьютерная графика. Лекция 4 Система координат frame bufferа x y z Видовой порт Видимый объем
66 Компьютерная графика. Лекция 4 Передача вершин, заданных в системе координат модели на вход графического конвейера OpenGL
67 Компьютерная графика. Лекция 4 Преобразование моделирования-вида
68 Компьютерная графика. Лекция 4 Расчет освещения и цвета вершин
69 Компьютерная графика. Лекция 4 Сборка примитивов
70 Компьютерная графика. Лекция 4 Отсечение плоскостями отсечения, задаваемыми пользователем
71 Компьютерная графика. Лекция 4 Умножение на матрицу проецирования и перспективное деление
72 Компьютерная графика. Лекция 4 Растеризация Процесс преобразования примитива в двухмерное изображение. Каждая точка такого примитива содержит информацию о цвете, глубине, и текстуре Точка и связанная с ней информация называется фрагментом
73 Компьютерная графика. Лекция 4 Операции над фрагментами Тест принадлежности контексту рендеринга Тест «ножниц» Альфа-тест Тест трафарета Тест глубины Смешивание цветов Dithering Логические операции (для индексированных цветов)
74 Компьютерная графика. Лекция 4 Запись значений в буфер кадра
75 Компьютерная графика. Лекция 4
76 Обработка ошибок В ходе работы с OpenGL могут возникать ошибочные ситуации В целях обеспечения производительности OpenGL обрабатывает только некоторое подмножество таких ситуаций Узнать о наличии ошибки позволяет функция: GLenum glGetError()
77 Компьютерная графика. Лекция 4 Коды ошибок OpenGL
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.