М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 6
Текст из файла (страница 6)
В следующих строках показано использование векторной и невекторной версий команд для задания цвета: к1001огзг(1.0, 0.0. 0.0); 0(11саг са(ег аггау() = ( ).э, Е.О, 0.0); В1Со1ог31ч(со!вг аггау); Наконец, в ОрепСЕ определен тип 6Счо10. Наиболее часто он применяется в командах, аргументами которых являются указатели на массив значений. В данном руководстве (за исключением реальных примеров кода) команды ОрепСЕ обозначаются только базовым именем, а звездочка означает, что существует несколько версий данной команды. Например, В1601ог* () подразумевает все версии команды, используемой для установки текущего цвета. Если будет нужно акцентировать внимание на конкретной версии команды, к имени будет добавлен необходимый суффикс.
Так, В)Чеггех*ч() обозначает все векторные версии команды определения вершин. Орепб) как конечный автомат ОрепСŠ— это конечный автомат. Вы переводите его в различные состояния (или режимы), в которых он остается до момента следующего изменения. Как вы уже видели, текущий цвет — это параметр состояния. Вы можете его устанавливать в белый, красный или какой-либо другой цвет, и после этого все объекты будут отображаться этим цветом до тех пор, пока вы ега не смените каким-то другим. Текущий цвет — один из многих параметров состояния ОрепС(..
Другие отвечают за текущее мадельно-видовое преобразование, тип линий и многоугольников, методы отображения многоугольников, режим упаковки пикселов, расположение и характеристики источников света, свойства материала объектов. Многие параметры состояния связаны с режимами, которые включаются и выключаются командами к1ЕпаЫео и я101заЫеО. Каждый параметр состояния или режим имеет значение по умолчанию, и в любой момент можно запросить у системы текущее состояние. Обычно для этого используется одна из шести комаНд: к16есВ001еапч(), я16еСРоиЫечо, к16еСР1оатчО, к16ет1птекегч(), В16еСР01птегчО и а11зЕпаЫег)О.
Команда выбирается в соответствии с типом данных параметра. Для некоторых параметров состояния используются более специфичные команды-запросы (такие как к16ег(1кп(*О, к16еГЕггогО или к16етР01укоп51! рр1е()), Кроме того, можно сохранить набор параметров состояния в стеке командой к1РазЬАсгг! Ь() или В1РаэЬС11епсЯссг1Ь(), временно их изменить и позднее восстановить значения командой к1РорАГгг!Ь() или к1РарС1! епСАГ(г!ЬО. При временном изменении состояний использование этих команд предпочтительнее, так как они более эффективны. 30 Глава 1 ° Введение в Орепб1. В приложении Б приведен полный список параметров состояния, которые можно запросить.
Для каждого параметра в приложении также перечислены соответствующие команды к16ет'(), тип возвращаемого значения и значения по умолчани|о. Конвейер рисования Орепб( Большинство реализаций ОрепС1 имеет сходную последовательность операций, серию агапов обработки, называемую конвейером рисования ОрепСЕ. Этот порядок, как показано на рис. 1.2, не регламентирует строго действия ОрепС)., а, скорее, представляет собой руководство к тому, что делает ОрепС1..
Если вы новичок в трехмерной графике, предстоящее описание может оказаться сравнимо с питьем воды из пожарного гидранта. Вы можете проглядеть текст и рисунок сейчас и возвращаться к ним позже, по мере прочтения каждой главы втой книги. Для обработки данных ОрепСЕ взял на вооружение подход, примененный Генри Фордом в автомобилестроении. Векторные данные (вершины, линии и многоугольник) подвергаются конвейерной обработке рядом блоков, включая блоки оценки и операции с вершинами, а растровые данные (пикселы, изображения и битовые образы) обрабатываются отдельно. Оба типа данных проходят одни и те же финальные стадии (растеризацию и операции над фрагментами) перед тем, как окончательный набор пикселов будет записан в буфер кадров.
4~~> ~Ю 4~~> ~~> Ю % ч.> Рис. 1.2. Порядок операций Конвейер рисования Орепсь 31 Теперь рассмотрим некоторые ключевые стадии конвейера рисования Орепб1 более подробно. Списки отображения Все данные, как векторные, так и растровые, могут быть сохранены в списках отображения для текущего или последующего использования. (Альтернативой хранению данных в списках отображения является непосредственное использование данных, также известное как непосредственный режии.) При выполнении списка отображения хранящаяся в нем информация посылается на обработку так же, как если бы она посылалась на обработку приложением в непосредственном режиме.
(См. главу 7 для получения более подробной информации о списках отображения.) Вычислители Все геометрические примитивы в конечном итоге описываются вершинами. Параметрические кривые и поверхности могут быть первоначально описаны контрольными точками и многочленами — базисиыии функциями. Вычислители (ета!цагогз) предоставляют способ для получения (генерации) вершин, применяемый для представления поверхности, заданной контрольными точками.
Метод полиномиального отображения вырабатывает нормали к поверхности, координаты текстур, цвета и значения пространственных координат из набора контрольных точек. (См. главу 12 для получения более подробной информации.) Операции над вершинами Следующей стадией обработки являются операции над вершинами, преобразуюшие вершины в примитивы. Некоторая информация о вершинах (например, пространственные координаты) преобразуется с использованием матриц размерностью 4 х 4. Пространственные координаты проецируются из положения в трехмерном пространстве в положение на экране. (См, главу 3 для получения более подробной информации о матричных преобразованиях.) Если привлекаются дополнительные возможности, зта стадия расширяется.
При использовании текстурирования могут генерироваться и преобразовываться координаты текстур. Если задействуется освещенность, выполняются расчеты значений цвета исходя нз данных преобразованных вершин, нормалей к поверхности, положения источников света, свойств материалов и другой информации. Компоновка примитивов Отсечение, важнейшая часть сборки примитивов, — это удаление частей геометрических объектов, которые выходят за границы полупространства, определенного плоскостью. Точечное отсечение обычно отбрасывает вершины; отсечение линий или многоугольников может добавлять дополнительные вершины, в зависимости от того, как линия или многоугольник отсекаются.
32 Глава 1 ° Введение в Орепб~ В некоторых случаях это происходит за счет разделения по перспективе, когда удаленные объекты кажутся меньшими, чем близкие. Слелующие на очереди— точка наблюдения и операции глубины (координата г). Если включена отбраковка и в качестве примитива используется многоугольник, отсечение может быть выполнено за счет отбраковывающего теста. В зависимости от режима отображения многоугольника, он может быть нарисован точками нли линиями. (См.
раздел «Подробно о многоугольниках» главы 2.) Результатом этого этапа являются законченные графические примитивы, вершины которых преобразованы и отсечены; с вершинами связаны цвет, глубина и иногда координаты текстур, а также рекомендации к растеризации. Операции над пикселами В то время как векторные данные проходят по одному пути в конвейере рисования ОрепОЦ растровые данные следуют другим маршрутом. Пикселы из массива системной памяти сначала распаковываются из одного из множества различных форматов в некоторое число компонентов.
Затем данные масштабиру1отся, трансформируются и обрабатываются как пиксельные карты. Результаты накапливаются, а затем записыва|отся в память текстур или отправляются на этап растеризации. (См. раздел «Конвейерная обработка изображений» главы 8.) Если растровые данные считываются из видеобуфера, выполняются операции при пересылке пикселов (масштабирование, смешение, отображение и ограничивание), Затем результаты упаковываются согласно формату и возвращаются в массив в системной памяти.
Существуют специальные пиксельные операции для копирования информации из одной части видеобуфера в другую или в память текстур. Операции при пересылке пикселов выполняются однократно перед тем, как данные записываются в память текстур или возвращаются в видеобуфер. Компоновка текстур Приложения ОрепСЕ могут накладывать текстурные изображения на графические объекты с целью придания последним большего реализма.
Если используется несколько изображений текстур, представляется разумным поместить их в текстурные объекты для того, чтобы переключаться между изображениями стало просто. Некоторые реализации Орепос имеют специальные средства для увеличения производительности текстурирования. Например, может существовать специальная, высокопроизводительная память текстур.
Если такая память присутствует, текстурным объектам могут назначаться приоритеты для контроля над использованием атого ограничешюго и очень ценного ресурса. Растеризация Растеризация — это преобразование векторных и растровых данных во фрагменты. Каждому квадратному фрагменту соответствует пиксел в видеобуферс. Библиотеки, связанные с Орелб~ 33 Учитываются прерывистые линии и многоугольники, ширина линии, размер точек, модель закраски и вычисление покрытия для поддержки сглаживания, так как вершины связаны в линии, или вычисляются внутренние пикселы для закрашенных многоугольников.