1.7.5. Растеризация

Графические примитивы, обрабатываемые OpenGL, определяются набором данных для каждой вершины примитива. На следующем этапе (см. рис. 1.1, 5) примитивы (точки, линии, многоугольники) разбиваются на меньшие части в соответствии с расположением пикселов в буфере кадров. Этот процесс называется растеризацией. Каждый из элементов примитива, полученный после растеризации, называется фрагментом. Например, если нарисованная на экране линия в конечном итоге займет 5 пикселов, при растеризации она, изначально заданная двумя вершинами, будет разделена на пять фрагментов. Фрагмент определяется координатами окна, глубиной, цветом, координатами текстуры и другими параметрами. Значения каждого из атрибутов вычисляются с помощью интерполяции значений из вершин примитива. В процессе растеризации у каждой вершины определяют первичный и вторичный цвета. Функцией glShadeModel можно установить, будут ли значения цвета для пиксела интерполироваться из значений в вершинах (плавное затенение) или для целого примитива будет использоваться значение цвета последней вершины (постоянное затенение)1.

Для каждого типа примитивов есть свои правила растеризации и разные состояния OpenGL. У точек есть ширина, контролируемая glPointSize и другими параметрами, определяемыми вызовом функции gl PointPa remeter. У линий также есть ширина, устанавливаемая glLineWidth, и шаблон пунктира, устанавливаемый glLineStipple. У многоугольников тоже есть шаблон пунктира, но он устанавливается другой функцией - gl PolygonStipple. Многоугольники могут быть нарисованы по-разному: заполненные, только контуры, только точки вершин. Это контролируется функцией glPolygonMode. Также есть возможность функцией gl PolygonOffset установить для каждого фрагмента многоугольника глубину, отличающуюся от вычисленной ранее. Размещение многоугольников на переднем плане принудительно устанавливается функцией glFrontFace.

Антиалиасинг - это сглаживание острых углов примитива. Он включается вызовом функции gl Enable с соответствующей константой (GL_P0INT_SM00TH, GL_L1NE_SM00TH или GL_P0LYG0N_SM00TH).

1.7.6. Предварительная обработка фрагментов

После растеризации над фрагментами выполняется еще ряд операций, в целом они называются обработка фрагментов (см. рис. 1.1, 6). Самая важная из них - это текстурирование. По координатам текстуры, вычисленным для данного фрагмента на предыдущем этапе, OpenGL обращается к текстурной памяти (см. рис. 1.1, 7). В OpenGL определено много состояний, которые влияют на текстурирование и определяют способ доступа к текстурам и их наложение на текущий фрагмент. Для реализации этого этапа существует множество расширений, довольно сложных для начинающих. Читатель узнает больше о текстурировании в разделе 1.10.

На этом этапе выполняются и другие операции над фрагментами. Дымка может изменять цвет фрагмента в зависимости от его расстояния отточки обзора. Сложение цветов получается сочетанием первичного и вторичного цветов фрагмента. Параметры дымки устанавливаются функцией gl Fog, а вторичный цвет передается как атрибут вершины в функцию glSecondaryColor или вычисляется на этапе освещения.


⇐ вернуться назад | | далее ⇒