Использование OpenGL

2 АРХИТЕКТУРА OPENGL

2.1 Конвейер OpenGL

Для написания программ, эффективно использующих OpenGL, необходимо себе хорошо представлять её структуру.

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


Рисунок 3.1 - Общая структура OpenGL.

Кратко рассмотрим функции каждого блока схемы, изображённой на рисунке 3.1.

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

Обработка вершин и сборка примитивов (Per-vertex operations & primitive assembly) - основной блок библиотеки. С его помощью можно получить некоторый набор вершин, из которых образуется нечто единое и неделимое, называемое примитивом. На этом этапе OpenGL обрабатывает примитивы (точки, линии, полигоны), задаваемые вершинами. Вершины трансформируются и освещаются, а примитивы обрезаются границами области вывода.

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

Обработка фрагментов (Per-fragment operations) - последняя стадия обработки информации. Включает в себя Z-буферизацию, смешение цветов, логические операции и т. п.

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

Операции над пикселями (Pixel Operations) - работа непосредственно с информацией, выводимой на экран дисплея. На этом этапе задаётся цвет каждого пикселя, выводимого в буфер кадра (на экран) как на основе информации, полученной из предыдущих этапов, так и непосредственно со входа OpenGL (например, при выводе битового массива на экран).

Подготовка списков изображений (Display List) - уникальная возможность, с помощью которой можно объединить некоторую последовательность команд OpenGL в единый блок (список), который затем можно вызывать в любой момент с помощью единственной команды. При этом производительность приложения резко повышается.

Текстурная память (Texture Memory) - область памяти, предназначенная для хранения битовых массивов, которые затем используются OpenGL в качестве текстур. На аппаратных ускорителях 3D графики, как правило, представляет собой быструю память, доступ к которой происходит без задержек. Её организация накладывает определённые ограничения на максимальный размер хранимых текстур, а также на их форматы.