1. Конвейер рендеринга графики
Это относится ко всему процессу обработки и преобразования некоторых исходных данных и, наконец, к выводу данных на экран.
1.1 История развития
- Раннее программирование графики: вызов библиотеки функций, предоставленной поставщиком оборудования (библиотека функций, используемая для рисования примитивов и их свойств, не существует)
- Генерация графических стандартов: поставщики оборудования предоставляют стандартные графические базы данных, которые позволяют генерировать изображения независимым от устройства способом.
- GKS (система графического ядра, система графического ядра)
- PHISS (Система иерархической интерактивной графики программиста, Система иерархической интерактивной графики программиста)
- OpenGL
- Фиксированный конвейер: графический API предоставляет стандартный интерфейс для работы с оборудованием; с точки зрения внутренней реализации API использует фиксированный способ обработки различных запросов на отрисовку примитивов или атрибутов, предложенных программистом. Эту внутреннюю реализацию часто называют конвейером рендеринга с фиксированной функцией.
- Фиксированный к программируемому: Появление перехватчиков функций: преодолевайте ограничения конвейеров с фиксированными функциями и используйте программируемые шейдеры для изменения поведения определенных шагов в конвейере.
- Программируемый конвейер (OPenGL2\OpenGLES2 начал поддерживать программируемый конвейер)
2. Три этапа программируемого конвейера рендеринга
2.1. Стадия подачи заявки
将需要屏幕上显示出来绘制的几何体,也就是绘制图元,如点、线、矩形等输入到绘制管线的下一个阶段。
具体包括图元的顶点数据、摄像机位置、光照纹理等参数
2.2.Геометрический этап
几何阶段需要将顶点数据最终进行屏幕映射
这其中需要:
将各个图元放到世界坐标系中,也就是进行模型变换
根据关照纹理等计算顶点处材质的光照着色效果
根据摄像机的位置、取景范围进行观察变换和裁剪
最后进行屏幕映射,也就是把三维模型转换到屏幕坐标中
2.3, этап растеризации
Входными данными для части растеризации являются преобразованные и спроецированные вершины, цвета и координаты текстуры. Его задача — придать каждому пикселю правильный цвет, чтобы можно было нарисовать всю графику. Поскольку входные данные представляют собой вершины треугольника, необходимо пройти одну за другой в соответствии с разницей поверхностей треугольника. Треугольник вычисляет значение цвета каждого пикселя. Затем объедините их в соответствии с их видимостью и т. д., чтобы получить окончательный результат.
-
Настройка треугольника заключается в том, чтобы получить границу треугольника из данных вершин, то есть соединить точки, чтобы сформировать линию.
-
Обход треугольника генерирует сетку для заданных вершин треугольника, вычисляет положение пикселя, покрывающего сетку треугольника, и соответствующий пиксель генерирует фрагмент. И каждый пиксель во фрагменте получается путем интерполяции на основе информации о вершинах треугольника.
Уведомление:Настройка треугольника и обход треугольника выполняются конвейером рендеринга автоматически.
-
Фрагментное затенение: Фактически, предыдущий этап растеризации не влияет на преобразование цвета пикселей на экране, но генерирует ряд информации о данных, чтобы описать, как каждая треугольная сетка покрывает каждый пиксель, и каждый фрагмент отвечает за хранение этих данных. затем окраска фрагментов может вычислить значение цвета каждого фрагмента на основе этих данных. На этом этапе можно использовать многие важные методы рендеринга, такие как наложение текстуры. Но до этого момента фрагмент не влиял на значение цвета пикселя, и со значением цвета пикселя нужно работать пофрагментно.
-
Операция фрагмента: например, между двумя объектами есть окклюзия, а значение глубины отличается, тогда значение цвета конечного пикселя необходимо смешать с глубиной и цветом. Процесс выглядит следующим образом:
3. Взаимодействие между процессором и графическим процессором
Фаза приложения выполняется процессором, а последующие фазы геометрии и растеризации выполняются графическим процессором, а что насчет графики и записи между ними?
3.1 Язык шейдеров
Если программисту нужен прямой доступ к GPU, это очень хлопотное дело, и ему нужно иметь дело с различными регистрами и видеопамятью. Интерфейс графического программирования обеспечивает уровень абстракции на этих аппаратных средствах, что является графическим стандартом, упомянутым ранее. Текущим отраслевым стандартом является OpenGL/DirectX. Приложение вызывает графический интерфейс OPenGL/DirectX для передачи всех данных рендеринга в ЦП, ЦП вызывает соответствующие команды рендеринга для рендеринга, а драйвер видеокарты переводит эти команды рендеринга в коды, понятные графическому процессору, для завершения реального рендеринга. .
Поэтому производители видеокарт должны предоставлять драйверы для интерфейса OPenGL/DirectX. Если версия OpenGL/DirectX обновлена, производителю видеокарты необходимо обновить соответствующий драйвер видеокарты.
3.2 GLSL
3.2.1 Язык шейдеров OpenGL
Основные моменты включают:
- Вершинный шейдер — это небольшая программа, которая сообщает компьютеру, как создавать штриховые рисунки — как обрабатывать такие данные, как вершины, нормали и т. д.
- Фрагментный шейдер Это небольшая программа, которая сообщает компьютеру, как раскрашивать — как бороться с влиянием света, тени, окклюзии, окружения и т. д. на поверхность объекта и, наконец, генерировать изображение.
Процесс рендеринга, который использует обработку передачи данных этих двух шейдерных апплетов, называется программируемым конвейером. Код, написанный на языке шейдеров, может существовать в текстовом виде, вНе компилируется на процессореДа, когда программа запущена, она транслируется драйвером видеокарты в GPU. Поток использования шейдеров в OpenGL:
创建着色器对象
源码关联到着色器对象
编译着色器
创建一个程序对象
将着色器对象关联到程序对象
3.2.2 Связь с OpenGL
3.2.3 Типы данных
3.2.4 Структура управления
3.3 ЭВО, ВБО и ВАО
3.3.1 EBO
Объект буфера элемента, также называемый IBO: объект буфера индекса, мы называем егоиндексный буферный объект, этот буфер в основном используется дляХранить информацию об индексе вершин.
3.3.2 VBO
Объект буфера вершин, объект буфера вершин, в основном используемый дляХранить различную информацию о вершинах. Преимущество: информация о вершинах модели помещается в VBO, так что каждый раз при отрисовке модели данные больше не берутся из сферы влияния ЦП, а напрямую из видеопамяти ГП, тем самым повышая эффективность.
3.3.3 VAO
Vertex Array Object, объект массива вершин, это комбинация состояний, которая сохраняет все атрибуты данных вершин, хранит формат данных вершин и ссылку на объект VBO, требуемый вершиной. Примечание: Данные вершины модели не хранятся в VAO, а данные по-прежнему хранятся в VBO.VAO эквивалентен хранению ссылки на VBO.
4. Эксперимент с кодом
5. Ссылка
Вышеупомянутое является учебными заметками, взятыми из курса компьютерной графики Хуаке.Woohoo.I course163.org/course/hu St…