Поделиться через


Базовая операция OpenGL

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

Схема этапов конвейера обработки данных OpenGL.

Этапы обработки в базовой операции OpenGL:

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

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

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

  • Растеризации На этапе растеризации создается ряд адресов буфера кадров и связанных значений с использованием двумерного описания точки, сегмента линии или многоугольника. Каждый созданный таким образом фрагмент подается на последнем этапе, по каждому фрагменту операций.

  • Операции по фрагментам Это окончательные операции, выполняемые с данными до их сохранения в виде пикселей в framebuffer.

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

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

  • Хранится в виде памяти текстуры для использования на этапе растеризации.
  • Растровые фрагменты, полученные фрагменты объединяются в framebuffer так же, как если бы они были созданы из геометрических данных.