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

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

Во фрагментном шейдере можно обрабатывать как фрагменты, созданные gl Bitmap или gl DrawPixel s, так и значения, полученные из текстурной карты. Операции работы с изображением можно разделить на две основные категории: один пиксел за раз и несколько пикселов за раз. Операции, относящиеся к первой категории, можно реализовать во фрагментном шейдере на языке шейдеров OpenGL довольно просто. Из varying-переменной gl_Col or шейдер получает цвет фрагментов, созданных gl Bitmap или gl DrawPixel s. Операции первой категории тоже можно выполнять, но для этого сначала нужно сохранить изображение в текстурной памяти, к которой затем выполняется несколько обращений из шейдера.

Преимущество использования шейдера OpenGL для операций с изображениями состоит в том, что обычно они выполняются на графическом оборудовании значительно быстрее, чем на основном процессоре, так как в современных графических акселераторах многие операции могут выполняться параллельно. К тому же основной процессор при этом освобождается для других задач. Если изображение сохраняется как текстура, над ним в реальном времени можно выполнять операции коррекции цвета, удаления шума, увеличения резкости и пр. с очень небольшой нагрузкой шины ввода-вывода.

16.2. Математические отображения

6.1. Геометрические преобразования зображения В стандартном OpenGL определена только одна операция над геометрическими размерами изображения: пиксельное масштабирование. Эта операция масштабирует изображение перед отображением на экране.


⇐ Предыдущая| |Следующая ⇒