М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 7
Текст из файла (страница 7)
С каждым фрагментом связаны значения цвета и глубины. Операции над фрагментами Перед записью значений в видеобуфер выполняется ряд операций, которые могут изменить или даже отбросить фрагменты. Все эти операции могут быть разрешены или запрещены (включены или выключены). Первая ожидаемая операция — текстурирование, когда тексел (элемент текстуры) генерируется из памяти текстур для каждого фрагмента и применяется к фрагменту.
Затем может выполняться вычисление тумана, затем тест отсечения, альфа-тест, тест трафарета и тест буфера глубины (буфер глубины связан с удалением невидимых поверхностей). Неудачное завершение теста может прервать процесс фрагментации. Далее производятся смешивание, размытие, логические операции и наложение битовой маски (см. главы 6 и 10). Наконец сформированные фрагменты рисуются в соответствующем буфере, где из них формируются пикселы и определяется их окончательное местоположение. Библиотеки, связанные с ОрепЫ ОрепС1. предоставляет мощный, но простой набор команд, и все высокоуровневое рисование должно быть определено в терминах этих команд.
К тому же программы ОрепСЕ используют базовые механизмы оконной системы. Несколько библиотек, приведенных ниже, позволяют упростить решение программных задач; ° ТЬе ОрепС1. ()Г!!!гу ЫЬгагу (СГЛАЗ) содержит несколько команд, использующих низкоуровневые команды ОрепС1., которые позволяют устанавливать значения видовых матриц и матриц проекций, выполнять разбивку на многоугольники н рендеринг поверхностей.
Эта библиотека входит в состав любой реализации ОрепС . Составляющие С1Л) описаны в Орели йе~егепсе Мапииб Наиболее полезные команды СЬ() описаны в данной книге, в соответствующих разделах, как, например, в главе 11 и в разделе «Интерфейс !ч()КВВ библиотеки СШ» главы !2.
Все команды СШ начинаются с я1ш ° Для каждой оконной системы существуют библиотеки, расширяющие функциональные возможности Орели по поддержке данной оконной системы. Для компьютеров, использующих систему Х тт*1пг)овз, таким расширением является библиотека СЕХ (ОрепСЕ Ехсепз1оп го сйе Х Ъ'!пбо лз 5уъгегп).
Команды С).Х начинаются с префикса к1х. Для М!сгозо(г Ю1пс!оъз такой библиотекой является ЖС1.. Все команды ЪЪ'СЬ начинаются с ня1. Для ОЯ/2 от 1ВМ используется РСЬ (Ргезептат!оп Мапаяег го ОрепСЬ), и ее команды на- 34 Глава 1 ° Введение в Орепб~ чинаются с рд1, Для Арр1е используется библиотека АС1., команды которой начинаются с ад1.
Все эти расширения для оконной системы более подробно описаны в приложении В. Кроме того, команды С1.Х представлены в ОрепСб йе)егепсе Мапиаб ° СШТ (ТЬе ОрепСь УГ!1!Гу Тоо1й!1) — зто независимый от оконной системы набор инструментов, написанных Марком Килгардом (Маги Кг1яаг<1) для того, чтобы устранить различия между различными АР! по управлению окнами. Библиотека СШТ рассматривается в следуюшем разделе и более подробно описана в книге Марка Килгарда «ОрепС1. Ройгатття)ог Ггге Х Иггпггои Яузгегл» (издательство А<<<уй«оп-й'е№1еу, 1996).
Команды СШТ лепсо опознаются по префиксу д1ог. Если вас интересуют исходные коды для СШТ, см, раздел «Как получить примеры программ» этой книги. Включаемые файлы Обычно в заголовочные данные каждого файла ОрепСЕ-приложения включается файл д\ . и. Почти все приложения ОрспС1. исгюльзуют СШ, вышеупомянутую библиотеку утилит ОрепС1., которая тянет за собой заголовочный файл д1о.в. Итак, почти все исходные тексты программ ОрепС1.
начинаются так: №1лсзоае <бЬГХГ.Л> №!лсгнав <бГГХГо.л> ПРИМЕЧАНИЕ При работе с М!сговоГГ уу1лдоггв до присоединения д1Л и д1о.ь требуется включить»«!обо»уз№Ь твк квк некоторые макросы, используемые в версиях д!.Л и д1о. Л для М!сговоГГ УУ1лг!оигв, определены в ил!лаоигв.п. Библиотеки ОрепС1. постоянно изменяются.
Различные производители графического оборудования добавляют новые возможности, которые могут быть не учтены в д1. П. Для их использования в ОрепС1 имеется дополнительный заголовочный файл д1ех С. П. Этот файл содержит последние дополнения, и его можно получить на веб-сайте производителя оборудования или на официальном сайте ОрепС1 (гз11р:/гггууг»у.орепд(.огд).
Как и любой заголовочный файл, он включается следуюшей командой; №!лсголе "Хгехг.ь" Вы, должно быть, заметили, что имя файла заключено в кавычки, а не в скобки. Это неспроста. Так как д1ехг. и предоставляет доступ к новым возможностям, введенным производителями видеокарт, вам лучше всего будет взять последнюю версию из Интернета для того, чтобы успешно компилировать программы. Кроме того, вы можете столкнуться с проблемой отсутствия разрешения на запись файла д1ехс. П в системный каталог заголовочных файлов (например, /взг/!пс1цг!е) в системах 111«1Х.
Если вы используете дополнительные интерфейсные библиотеки, такие как СЕХ, АС1., РС1. или ЪЪ'С(., вам нужно включить дополнительные заголовочные Библиотеки, связанные с ОрепбЬ 35 файлы. Например, для СЕХ необходимо добавить следующие строки в программный код: №!пстипе <Х11ГХ11Ь.П> №кпстцпе <Сиудгх.ь> В Мкгозой тлт1пг)отуз для библиотеки ЮСЕ достаточно указать №1пс1нпе <и!опоив.ь> Если вы испольауете С1Л1Т, вам нужно добавить строку №1пс1ипе <6ШВ1оС,П> ПРИМЕЧАНИЕ Подключение р!цг.в гарантирует, что йьв и й!ц. Ь также подключены, поэтому подключение всех трех библиотек является избыточным. Кроме того, й!цг.ь до включения йьп н бац.
Ь определяет все используемые макросы, все зависимые от операционной системы. Поэтому, чтобы уменьшить вашу программу, использующую бгнт, подключите только фцг.ь. Большинство программ ОрепСЕ также обращаются к стандартным системным библиотекам С, то есть требу1от заголовочные файлы, не связанные с графикой, например: №1пс1оее <зтп11Ь.П> №1пс1цпе <зтп1о.ь> В твко~ах наших примеров определения заголовочных файлов отсутствуют по причине обычной удобочитаемостн. 610Т, набор инструментов Орепб~ Как известно, библиотека ОрепСЕ содержит команды отрисовки, причем она разрабатывалась платформо-независимой. Поэтому в ней нет команд для открытия окон или обработки событий от клавиатуры или мыши.
К сожалению, невозможно написать полноценную графическую программу без, как минимум, открытия окна, а более интересные приложения требуют пользовательского ввода или других сервисных функций операционной системы или оконной снстсмы. Во многих случаях законченные программы представляют больший интерес, поэтому в данной книге используется С1ЯТ для упрощения работы с окнами, определения ввода и т, д, Если у вас есть реализации ОрепС1 и Сь11Т, примеры из данной книги должны запускаться без внесения каких-либо изменений.
Кроме того, в отличие от команд рисования ОрепС1., которые позволяют строить только простые геометрические примитивы (точктн линии и многоугольники), СЕНТ предоставляет возможности для создания более сложных трехмерных объектов, таких как сфера, тор и чайник.
Поэтому снимки экранов результатов выполнения программ представляют определенный шперес, (СЕП также имеет команды для создания некоторых трехмерных объектов, таких как сфера, цилиндр и конус.) Управление окнами Пять команд выполняют задачи, необходимые для определения окна: 36 Глава 1 ° Введение в ОрепвС ° я1ц с 1п ! С(Спс атКс, сЬаг " аг(!и) инициализирует СШТ и обрабатывает любые параметры командной строки (для Х-систем это могут быть такие параметры, как -б!эр1ау и -яеоаесгу). Команда я1цс1п(СО должна быть вызвана до любых других команд СШТ. в я1цс1п! С0! эр1эуМобе(цпз(йпес) шС тот(е) определяет, какую цветовую модель, В.СВА или индексную, следует использовать.
Также она может определять режим одиночной или двойной буферизации окна. (Если вы работаете в режиме цветовых индексов, вам необходимо загрузить какую-нибудь цветовую карту с помощью команлы х1цс5ессо1огО.) Наконец, с помощью этой команды можно определить, связано ли окно с глубиной, трафаретом, множественной выборкой и/или буфером накопления. Например, если требуется создать окно с двойной буферизацией, моделью цвета РСВА и буфером глубины, вы можете вызвать функцию следующего вида я1цс1п ! С0! эр1аумобе(6сцт 000Все ! 6СВТ Р6В ! 6СОТ 0ЕРТН).
° а1цс1п(сы!пбонРоэ)с!оп(!псх,!пс у) определяет положение левого верхнего угла окна. ° а1цс1п! Си! пбои5! Се((пс геггггл, !пс э(ге) определяет размер окна в пикселах. ° ! п С а1ц С С ге а Се)(! пбон(сЬаг 'зтппя) создает окно с содержимым ОрепС1.. Она возвращает уникальный идентификатор нового окна. ПРИМЕЧАНИЕ пока не будет вызвана функция вммэ!псоорО, окно отображено не будет! Обратная связь я1цс01эр1аугцпс(чоЫ ("/ипс)(цоЫ)) — первая и наиболее важная функция обратной связи.
Когда С!.()Т определяет, какое содержимое окна нужно перерисовать, выполняется функция обратной связи, зарегистрированная с помощью я1цс0! эр1аугопс(). Поэтому все команды для перерисовки сцены следует размешать в функции обратной связи. Если программа изменяет содержимое окна, иногда вызывают функцию я1цсРоэсРе! вр1ау (), которая заставляет функцию а1цсМа! псоор() вызвать зарегистрированную функци!о обратной связи при первом удобном случае. Запуск программы последнее, что необходимо сделать, — вызвать функцию к1цсма! псоор (цо(б). После этого будут показаны все созданные окна вместе с их содержимым.