Структура конвейера
Работа с пространственными объектами приводит к существенному увеличению количества и сложности операций, выполняемых конвейером при визуализации модели. Для примера рассмотрим обобщенную последовательность операций, выполняемых видовым конвейером OpenGL. На вход конвейера попадает информация двух типов. Первый тип представляет собой описания примитивов заданные через вершины. Второй тип – это описания плоских изображений. Рассмотрим подробнее основные группы операций, более детально рассмотренные в [1]. Вычислители.Все геометрические примитивы, обрабатываемые конвейером, описываются своими вершинами. Параметрические кривые и поверхности могут быть описаны контрольными точками и базовыми функциями (обычно полиномиальными). Вычислители — это методы, которые генерируют координаты вершин, нормали к поверхности, координаты текстур и цвета точек, опираясь на контрольные точки. Операции с пикселями (Pixel Operations).Данные о пикселях проходят в конвейере OpenGL по своему маршруту. Данные, хранимые в массивах системной памяти, распаковываются с учетом набора возможных форматов, затем масштабируются, сдвигаются и обрабатываются так называемой картой элементов отображения (pixel map). Результат записывается либо в память текстуры, либо посылается на следующий этап — растеризацию. Пунктиром на схеме показана возможность считывания пиксельной информации из буфера кадра. Полученная таким образом информация также подвергается масштабированию и сдвигу, а также может быть упакована и помещена в системную память. Сборка текстуры (Texture Assembly). Текстура — это изображение, накладываемое на поверхность геометрического объекта для придания ему реалистичности. Текстурные объекты создаются в OpenGL для упрощения их повторного использования. Использование текстур сопряжено с большими затратами, поэтому в работе с ними применяют специальные ресурсы, такие как память текстур. Так называют быструю видеопамять, приоритет использования которой отдается текстурным объектам. Вопросам наложения текстур посвящена лекция 8. Растеризация – это процесс преобразования геометрических данных во фрагменты. Каждый фрагмент соответствует пикселю в буфере кадра. При вычислении цвета фрагмента учитывается большое количество факторов: узор штриховки полигона или линии, толщина линии и размер точки, сглаживание зубчатости линий, тень объекта, режим заполнения полигона, глубина изображения (факт видимости или невидимости) и др. Методы растеризации мы рассмотрим на лекции 11. Отметим, что во фрагменты преобразуется также и прошедшая обработку пиксельная информация. Операции с фрагментами могут начинаться с определения текселя текстуры, соответствующего фрагменту. Фрагмент можно рассматривать как прообраз пикселя. Далее следует серия тестов, от результатов которых зависит: будет ли занесена информация фрагмента в буфер кадра. Отметим следующие тесты:
Кроме того, фрагмент может быть подвергнут дополнительным операциям: вычислению тумана (fog), смешиванию (blending), интерполяции цвета (dithering) и логическим операциям с содержимым буфера кадра.
|