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

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

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


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