OpenGL (Open Graphics Library)

Содержание

Слайд 2

Что такое OpenGL

OpenGL(Open Graphics Library) – это независящий от языка программирования и

Что такое OpenGL OpenGL(Open Graphics Library) – это независящий от языка программирования
платформы программный интерфейс для написание приложений, использующих 2D и 3D графику
Написанием спецификаций занимается Khronos Group
Используется для написания игр(Half-Life 1,2,3 о_0, Bioshock, Counter-Strike, …), специализированного ПО(Photoshop, Google Earth, Blender, …) , визуализации в научных исследованиях и т.д.

Слайд 3

Реализации OpenGL

На данный момент существуют реализации практически для всех платформ
Для мобильных

Реализации OpenGL На данный момент существуют реализации практически для всех платформ Для
платформ(iOs, Android) существует собственная спецификация OpenGL ES, учитывающая их аппаратные особенности
Большинство современных браузеров поддерживают WebGL - аналог OpenGL ES
Готовится спецификация Vulkan API для объединения OpenGL и OpenGL ES

Слайд 4

Зачем нам OpenGL

OpenGL позволяет не обращать внимания на особенности аппаратуры и драйверов,

Зачем нам OpenGL OpenGL позволяет не обращать внимания на особенности аппаратуры и
предоставляя единый API для разработчика
Если какая-то возможность не поддерживается аппаратурой/драйвером то OpenGL эмулирует её
Реализации OpenGL проходят специальные тесты на совместимость и эффективность использования оборудования

Слайд 5

Архитектура OpenGL

Основной принцип работы: получение набора векторных графических примитивов(с математической обработкой) –

Архитектура OpenGL Основной принцип работы: получение набора векторных графических примитивов(с математической обработкой)
точек, линий и треугольников для построения растровой картинки на экране и/или в памяти
Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет собой дискретный автомат
Почти все команды OpenGL делятся на 2 группы:
Добавление примитивов на вход в конвейер
Конфигурация конвейера для выполнения трансформаций
Императивный подход, т.е. Описание точной последовательности шагов для получения конечной растровой картинки

Слайд 6

Основные положения

Растеризация - это перевод изображения, описанного векторным форматом в пиксели или

Основные положения Растеризация - это перевод изображения, описанного векторным форматом в пиксели
точки, для вывода на дисплей
Render – полный процесс отображения растровой картинки на экране
Render Frame(или просто Frame) – часть процесса рендера, отображающая картинку в конкретном состоянии в данный момент времени
Texture – изображение, загружаемое в память для использования в процессе рендера
Framebuffer – набор буфферов в памяти устройства, содержащий всю информацию о данном состоянии на экране
Render context - поток в котором происходит процессе рендера

Слайд 7

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

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

Слайд 8

OpenGL в QT

За работу с OpenGL в QT отвечает модуль QT OpenGL
Основные

OpenGL в QT За работу с OpenGL в QT отвечает модуль QT
классы для работы с OpenGL:
QGLWidget – виджет поддерживающий работу с OpenGL.
QGLFunctions – класс, содержащий все необходимые функции для работы с OpenGL
QGLShaderProgram – класс для работы с шейдерами
QGLTexture - класс для работы с текстурами
QVectror4D/3D/2D,QMatrix(4x4,3x3,2x2), QQuaternion и т.д. – классы для работы с математическими примитивами

Слайд 9

QGLWidget

Виртуальная функция initializeGL() - функция для начальной инициализации OpenGL. Вызывается до начала

QGLWidget Виртуальная функция initializeGL() - функция для начальной инициализации OpenGL. Вызывается до
процесса рендера
Виртуальная функция resizeGL() – функция, вызываемая при изменение размера виджета
Виртуальная функция paintGL() – функция, в которой содержится последовательность действий для отображение фрейма

Слайд 10

QGLFunctions - основные функции

glEnable/glDisable(feature) – включает/выключает поддержку определенного свойства контекста OpenGL
glClear(clear_bitfield) –

QGLFunctions - основные функции glEnable/glDisable(feature) – включает/выключает поддержку определенного свойства контекста OpenGL
очищает указанные буфферы
glClearColor(r,g,b,a) – задает цвет в формате RGBA, который будет использоваться для в момент очистки буффера цвета
glVertex(2/3/4)(s/f/d/i)[v](…) - указывает координаты вершины в различных форматах
glBegin(mode) – указывает как использовать данные о вершинах, которые будут заданы после вызова данной функции. После задания всех нужных вершин вызывается glEnd().
glColor3f/4f[v](…) – указывает какого цвета будут вершины после вызова данной функции

Слайд 11

QGLFunctions - основные функции

glMatrixMode(mode) - указывает, в какой стек положить матрицу преобразования,

QGLFunctions - основные функции glMatrixMode(mode) - указывает, в какой стек положить матрицу
загруженную после вызова этой функции
glLoadMatrixf – устанавливает матрицу в вершине стека(стек выбран с помощью glMatrixMode) матрицу
glPush(Pop)Matrix – добавляет(удаляет) матрицу в(из) выбранный стек матриц
glViewport(x,y,w,h) – указывает положение и размер окна для отрисовки контекста OpenGL

Слайд 12

Рисуем линию

Рисуем линию

Слайд 13

Рисуем треугольник

Рисуем треугольник

Слайд 14

Немного о матрицах в 3D графике

Матрицы преобразования делятся на 3 типа: Model,

Немного о матрицах в 3D графике Матрицы преобразования делятся на 3 типа:
View, Projection
Model matrix – матрица преобразования координат из локальных в глобальные(World coordinates)
View matrix – матрица преобразования координат из глобальных в координаты взгляда(Camera)
Projection matrix – матрица преобразования координат из координат камеры в перспективные координаты(составляется по 4 параметрам: Горизонтального поле зрения – в градусах, соотношение сторон окна, расстояние до ближней и дальней плоскости перспективы(Ось z))
Конечная координата = Projection * View * Model * Vertex

Слайд 15

Немного о матрицах в 3D графике

Model matrix

View matrix

Немного о матрицах в 3D графике Model matrix View matrix

Слайд 16

Немного о матрицах в 3D графике

Немного о матрицах в 3D графике

Слайд 17

Немного о матрицах в 3D графике

Наиболее используемый размер матриц – 4x4
Почему 4x4

Немного о матрицах в 3D графике Наиболее используемый размер матриц – 4x4
?
Подматрица 3x3 называется нормальной матрицей

Слайд 18

Немного о матрицах в 3D графике

 

Немного о матрицах в 3D графике

Слайд 19

Свойства кватернионов

 

Свойства кватернионов

Слайд 20

Свойства кватернионов

 

Свойства кватернионов

Слайд 21

Рисуем куб

Куб с ребром длиной 1 и центром в точке (0,0,0)
Как нарисовать:
Разбить

Рисуем куб Куб с ребром длиной 1 и центром в точке (0,0,0)
все грани на 2 треугольника
Перечислить координаты всех треугольников в правильном порядке

Слайд 22

Рисуем куб

Рисуем куб

Слайд 23

Рисуем куб: Вариант 1 – В лоб

Рисуем куб: Вариант 1 – В лоб

Слайд 24

Рисуем куб: Вариант 2 – Чуть умнее

Рисуем куб: Вариант 2 – Чуть умнее