OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 87
Текст из файла (страница 87)
Если фрагмент лежит внутри прямоугольника, он считается успешно прошедшим тест на отсечение. Тесты и операции над фрагментами 39$ чо(с( к15с1ззог(С(япс х, С(лпс у, С1з(яе( ши(сй, Свалке( )сефс) Устанавливает положение и размеры прямоугольника отсечения (зс(ззог Ьох). Эти параметры определяют левый нижний угол (х, у) и ширину и высоту прямоугольника. Пикселы, лежащие внутри прямоугольника, успешно проходят тест. Отсечение включается и выключается указанием константы 6С 5С!550Р ТЕ5Т в вызовах к1ЕпаЬ1е() и В101заЫеО. По умолчанию размеры прямоугольника приравниваются размерам окна и отсечение выключено. Тест на отсечение — это просто частный случай теста трафарета, где в качестве области отсечения используется прямоугольная область.
Выделение его в особый случай объясняется тем, что на аппаратном уровне прямоугольное отсечение реаяизуется намного проще. Если же отсечение происходит медленно, значит оно Реализовано через вывод по шаблону программно. В расширенном варианте отсечение выполняется посредством нелинейного просцирования.
Сначала окно делится регулярной сеткой на подобласти, указываются область просмотра и параметры отсечения, которые ограничивают единовреясиное воспроизведение областей, Далее полная сцена проецируется на каждый Регион с использованием его собственной матрицы проекции. Чтобы узнать, активно ли отсечение, и запросить параметры прямоугольника отсечения, используйте константу 61 5С!550Р ТЕ5Т для В1!зЕпаЬ1еп(> и 6( 5С!550Р ВОХ для к16ег!птеКЕгч(). Альфа-тест В режиме РСВА алъфа-тест позволяет вам принять или отклонить фрагмент, основываясь на значении альфа-компонента.
Альфа-тест включается и выключается заданием константы 61 АСРНА ТЕ5Т для вызовов к1ЕпаЫеО и к101заЫеО. Чтобы определить, активен ли этот тест, используйте вызов я1!я ЕпаЫес) () с параметром 61 АСРНА ТЕ5Т. При работе теста сравнивается входящее значение альфа-компонента с его образяовым значением. Успех прохождения фрагмента через тест зависит от результася сравнения. Как эталонная величина, так и функция сравнения устанавливаются командой к1А1рпаЕипс О. По умолчанию в качестве образца принимается О, функция сравнения приравнивается 6с АсиАТ5, а альфа-тестирование не действует. Чтобы получить информацию о параметрах тестирования, используйте константы 61 АСРНА ТЕ5Т ЕННС и 6С АСРНА ТЕ5Т РЕЕ при вызове к16ег!птекегч().
чо(с) к1А1рваЕипс(СЬепцгп /ипс, С1.с!ащр1 ген); Устанавливает эталонное значение и функцию сравнения для альфа-теста. Эталонное значение (ген) ограничивается интервалом от 0 до 1. Допустимые значения аргумента (иис и их толкование представлены в табл. 10.2. Обозначение а1рЬаг соответствует фрагменту, а обозначение а1рЬа„— эталонному значению. 396 Глава 10 ° Буфер кадров Таблица 10.2. Значения параметров В1А1ртгаропсП Параметр Пояснение Одно из применений альфа-теста — реализация прозрачности. Для этого сцена воспроизводится дважды: сначала с фрагментами, у которых значение альфа-компонента равно 1, а затем с фрагментами, где это значение не равно единице. На обоих проходах следует включить буфер глубины, но на втором нужно также выключить запись в буфер глубины. Другой вариант применения заключается в указании тех мест изображения, которые не следует отображать, с помощью карт текстур.
Благодаря этому вы можете видеть через какие-то части изображения. Для тех участков, которые должны быть видимы, установите значения альфа-компонента в шаблоне равным 0.0, и в 1.0 в противном случае задайте эталонное значение равным 0.5 (или любым другим от 0 до 1) и задайте функпию сравнения 6Е 6РЕАТЕР. Такая «переводная картинка» (г(еса!) имеет просвечивающие части, и значения глубины не будут в отношении их эффективны. Эта техника, названная нами обшивкой (Ыйоагг(гпй буквально — реклама на стендах) описана в разделе «Пример смешивания» главы 6. Тест трафарета Тест трафарета имеет место только при наличии буфера трафарета. (Иначе он всегда пропускается.) При выводе по шаблону эталонное значение для пиксела сравнивается со значением, хранимым в буфере трафарета.
В зависимости от результатов сравнения, значение в буфере изменяется. Вы вправе выбрать функцию сравнения и образцовое значение, а также модифицировать их посредством команд В(5(епс1)гопс() и В15(епс110р(). чоЫ 615(епс11еопс(ОЕепшп/ипс, СЫпс ге(", ОЕп(пс таз(г); Устанавливает функцию сравнения (/иле), эталонное значение (геу) и маску (татгг) для их использования в тесте трафарета. Эталонное значение сравнивается со значением из буфера маски заданной функцией, но делается зто только для тех битов, для которых биты маски выставлены в 1.
Функция мо. жетбытьоднойизследующих:6Е МЕНЕМ,6ь АЕИАЧ5,6Е ЕЕ55,6Е 'ьЕ0ОАЯЯ. ЕПОАЕ, 6Е 6ЕПОАЕ, 6Е 6РЕАТЕР или 6Е МОТЕПОАЯ Например, если это 6ь ЕЕ 55, фрагмент считается успешно прошедшим тест, когда значение ге( меньше соответствующей величины в буфере трафарета. Если буфер трафарета Я. МЕЧЕР 61. АЙЧАЧ5 6Е ЕЕ55 Я. ЕЕООА3. 6Е ЕПОА1. 6( 6ЕПОАЕ 61. 6РЕАТЕР 6( МОТЕПОАЕ Никогда не принимать фрагменты Всегда принимать фрагменты Принять фрагмент, если а1р1таг< а(р)га, Принять фрагмент, если а1рЬаг< а1рэа, Принять фрагмент, если а1рМаг а1р)га, Принять фрагмент, если а(р)гаг> а(р1та, Принять фрагмент, если а1р)гат> а1рва, Принять фрагмент, если а1р(тати а1рЬа, Тесты и операции над фрагментами 397 содержит з битовых плоскостей, к младшим з битам маски, значениям из буфера трафарета и эталонному значению применяется поразрядное И до того, как будет выполнено сравнение, Все маскируемые значения интерпретируются как неотрицательные числа.
Тест трафарета включается и выключается указанием котютанты 6( 5ТЕМС1С ТЕ5Т в вызовах д1ЕпаЬ)е() и б10)заЬ1е(). По умолчани<о функция сравнения ((ипс) — 6С А(НАУ5,гву — О,таз(т — единицы, а обработка гю шаблону не активна. тоЫ д15(епс)10р(СЕепнпт (а(1, С1епшп г/аЫ, С1епшп граю); Задает, как изменяются данные в буфере трафарета по результату теста трафарета. В качестве аргументов выступают три функции — уи(1, г/а(1 и граю, которые могут быть указаны константами 6( КЕЕР, 6( ЕЕМО, 6( МЕРСАСЕ, 66 1МСД, 6( 1МСМ НМАР, 6( ОЕСМ, 6С ОЕСМ ХРАР или 6С 1МЧЕМТ.
Они соответствуют сохранению текущего значения, замене его нулем, замене на эталонное значение, инкременту с насыщением, инкременту без насыщения, декременту с насыщением и без пего и побитовому инвертированию. Результат инкрементирования и декрементирования ограничивается диапазоном от нуля до максимально допустимого беззнакового целого числа (2' — 1 для буфера трафарета с з битовыми плоскостями).
Функция )аЫ применяется к фрагментам, потерпевшим неудачу в ходе выполнения теста трафарета; для выдержавших испытание фрагментов срабатывает функция г)"а(1 в случае, если они не прошли тест глубины, и граю — если они преодолели тест глубины или если он не выполнялся. (См. раздел «Тест глубины».) По умолчанию всем трем аргументам присваивается операция 6( КЕЕР. н запрс)сы значений теста трафарета ))ы можете узнать значения для всех шести связанных с шаблоном параметров, вбратившись к функции запроса д16е т 1п теде г ч () и подставив в нее одно из знаиний, перечисленных в табл.
10.3. Вы можете также определить, где будет актиин тест трафарета, указав константу 6( 5ТЕМС1( ТЕ5Т для вызова а11зЕпаЬ(ес) (). <а м Ылнца 10.3. Значения запросов для теста трафарета Пояснение 3взченне запроса Функция трафарета Эталонное значение Маска трафарета Действие прн неуспехе теста трафарета Действие прн неуспехе буфера глубины если тест трафарета пройден Действие прн успехе буфера глубины, если тест трафарета пройден 61 5ТЕМС1( ГОМС 61 5ТЕМС1( МЕГ 6( 5ТЕМСПЕ,УАЕОЕ МА5К 61 5ТЕМС1( ГА16 6~ 5ТЕМС1( РА55 ОЕРТН ГАП.
й 5ТЕМС1( РА55 ОЕРТН РА55 су ито о- гь.та <С насыщением» означает, что значение маски ограничивается неким экстрекзльным уровнем. Если вы попытаетесь уменыпать нуль с насыщением, он так и мтанется нулем. «Без насыщения» следует понимать так, что при выходе за прежл допустимого диапазона значения берутся с другого его конца. Так, при попытке уменьшать нуль без насыщения, значение маски станет максимально возвожным (!) беззнаковым целым числом, 398 Глава 10 «Буфер кадров Примеры применения теста трафарета Вероятно, самое типичное применение теста трафарета — это маскирование области экрана неправильной формы для предотвращения рисования за пределами этой области (как в примере с ветровым стеклом из раздела «Буферы и их применениеч).