Выполнение всех описанных этапов приводит к тому, что графические примитивы, определенные приложением, оказываются сконвертированными в пикселы в буфере кадров для последующего отображения на экране. Но мы обсудили только графические примитивы - точки, линии, многоугольники. В OpenGL есть возможность выполнять также рендеринг растровых и других изображений.
1.8. Рисование изображений
В дополнение к рисованию объектов ЗО-геометрии OpenGL поддерживает рисование изображений. В терминах OpenGL изображения называются пиксельными прямоугольниками. С самого начала определение пиксельного прямоугольника хранится в памяти приложения (см. рис. 1.1, 11). Монохромные пиксельные прямоугольники заносятся в буфер кадров функцией gl Drawpi xel s, а растровые изображения - функцией gl Bitmap. Изображения для текстурной памяти задаются функциями glTexImage и glTexSublmage. Каждая из этих функций выполняет базовую обработку изображения вплоть до отдельных его точек.
1.8.1. Распаковка пикселов
В OpenGL данные изображений можно передавать во множестве форматов. Параметры, определяющие способ хранения изображений в памяти, задаются функцией gl Pi xel Store (длина каждой строки пикселов, пропускаемое количество строк перед первой, пропускаемое количество пикселов в каждом ряду). Для большей точности выполняемых над пикселами изображения операций все пикселы преобразуются в особую последовательность с помощью операции распаковка пиксе лов (см. рис. 1.1, 12). После того как пикселы переданы вызовом функции типа glDrawPixel s, выполняется распаковка пикселов, при этом применяются параметры распаковки, обеспечивающие правильное прочтение и интерпретацию данных. Каждый полученный пиксел присоединяется к группе пикселов, которая содержит либо цвет, либо глубину, либо маску. Группа пикселов цвета направляется в буфер цвета. Группа пикселов глубины направляется в буфер глубины. Группа пикселов шаблона направляется в буфер шаблона. Значения цвета хранятся в схеме RGBA и определяются из исходного изображения, следуя набору определенных OpenGL правил. В результате получается поток значений RGBA, которые отправляются на дальнейшую обработку.
1.8.2. Перемещение пикселов
После распаковки пикселов пиксельные прямоугольники подвергаются серии операций, называемых перемещением пикселов (см. рис. 1.1, 13). Эти операции применяются в разных направлениях: как при передаче данных из приложения в OpenGL (gl DrawPi xel s, gl Texlmage, gl TexSublmage), так и при копировании данных внутри OpenGL (gl CopyPi xel s, gl CopyTexInage, gl CopyTexSub Image) или передаче данных обратно в приложение (glReadPixels).
Перемещение пикселов можно настраивать функцией gl Pi xelTransfer. При этом устанавливаются параметры, определяющие, каким образом значения красного, зеленого, синего цветов, прозрачности и глубины будут масштабированы и сдвинуты. Также применяется специальная таблица преобразования для отображения одних параметров на другие (цвета или шаблона). Таблица преобразования задается командой gl Pi xel Map.