OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 64
Текст из файла (страница 64)
Команда 91СоруСопчо1а С ! опр ! 1Се г2 0 () копирует прямо- Расширение 1шад!пд Вньзег 301 )тольник пикселов из текущего буфера 6С РЕАО ВОЕЕЕР для последующего их использования в фильтре свертки. Если 6С СОМ1МАМСЕ или 6С 1МТЕМ5?ТУ заданы Ххя внутреннего формата (!лсегпа!гогтас), для задания значения фильтра свертки используется красный компонент пиксела.
го!с[ 6 1 со ру Спич о 1 и с 1 оп Е1 1 с е г 2 0(6(епшп Сагяед 61епшп тптна!Еопла.', 611пс х, 61зпс у, 61.з(хе( юЫЙ, 61л1хес Ье!яЬг); Определяет двухмерный фильтр свертки, инициализируемый пикселами из буфера кадров цвета. Аргумент Ыгяес должен быть установлен в 6С сОмндсдт10м 20, а в аргументе !псегпа!госта! должен быть указан один из внутренних форматов к1Сопно1вС1опЕ11Сег20().
Прямоугольник пикселов с левым нижним углом (х, у), шириной шЫ(Ь и высотой Ье!яЬ( читается из буфера кадров и преобразуется в указанный внутренний формат. Задание разъемных двухмерных фильтров свертки Фильтр свертки является разьемным (зерагаЫе), если он может быть представлен векторным произведением (овСег ргос[цсС) двух одномерных фильтров.
Команда В15ерагав)еЕ11Сег20() используется для задания двух одномерных фильтров, представляюших разъемный двухмерный фильтр свертки. Как и для 11сопчо1ис1опе)1сег20(), внутренний формат фильтра свертки определяет то, хак обрабатываются фильтры изображения. но д к15ерагаосеЕ11Сег20(61.епшп Гагяей 61.епвш !пгегпа!Гогтас, 61лгхе( м(ИгЬ, 61.мхе( ЬейЬг, 61.еппп1 /оппаг, 61.епшп гуре, сопзс 61ноЫ *гоге, сопзс 6).чоЫ 'со!итп) Описывает двухмерный разъемный фильтр свертки.
Аргумент гагяег должен быть установлен в 6С 5ЕРАРАВСЕ 20. Внутренний формат (т(егла!гоппас) принимает те же значения, что и для 61Сопчо1иС1опЕ11Сег20(). Ширина (геЫ(Ь) задает количество пикселов в массиве строки (гоге). Аналогично, высота (Ье(яЬг) задает количество пикселов массива столбца (со!итп).
Аргументы типа (гуре) и формата (/оппаг) описывают способ хранения строки и столбпа так же, как и для В1сопно1ис)опе11сег20(). Используйте 61Епапсе(6С 5ЕРАРАВСЕ 20), чтобы разрешить применение сверток, использующих разъемный двухмерный фильтр свертки. Если заданы одновременно 6С СОМНОСОТ1ОМ 20 и 6С 5ЕРАРАВСЕ 20, параметр 6С СОМНОСОТ1ОМ 20 имеет больший приоритет. Например, вы можете построить 3 х 3 6С СОМ1МАМСЕ разъемный фильтр свертки, издав одномерные фильтры для строки и столбца. Тогда полный двухмерный фильтр был бы вычислен как векторное произведение: 1/4 — 1/2 1/41 х [-1/2 1 -1/2! = -1/2 1 — 1/2 ~.
1/4 — 1/2 1/4 ~ 302 Глава В ° Вывод пикселов, битовых образов, шрифтов и изображений Разъемные двухмерные фильтры по отношению к затратам на вычисления более эффективны, чем обычные двухмерньге фильтры свертки. Одномерные фильтры свертки Одномерные фильтры свертки идентичны двухмерной версии за исключением того, что параметр высоты фнлътра предположительно равен единице. Однако они влияют только на спецификацию одномерных текстур (см. раздел «Одномерные текстуры» главы 9.) чоЫ к1Сопчо1и11опР111ег10(О1еппщ Гагяей О?еппш гп(егпа(рогта(, 01яге( тЫЙ, О1епшп )оппаг, ОЪеппщ гуре, сопзг О1чоЫ '(тайе)' Задает одномерный фильтр свертки.
Аргумент (агапе( должен быть установлен в 6( СОМЧОСОТ10М 10. Ширина (гаЫЙ) задает количество пикселов фильтра. Аргументы тгегпа)гоппад /о»та( и гуре принимают те же значения, его и для к1сопчо1о11опР111ег20О. Массив (тале указывает на одномерное изображение, используемое в качестве фильтра свертки. Используйте ВТЕпао(е(6С СОМЧО(ОТ10М 10), чтобы разрешить применение одномерных сверток. Вы можете захотеть использовать для фильтра свертки значения, сгенерированные из буфера кадров. Команда к1сорусопчо1ч11опР111ег10() копирует строку пикселов из текущего буфера 6 С РЕ АО ВОР Р Е Р и преобразует ее во внутренний формат ((пгегпа)раппа() лля дальнейшего применения в фильтре свертки.
чоЫ В1сорусопчо1о11опг! 11ег10(ОЪепшп Гагцей О1 епшп т(««па(раппа(, О(йптх, И.'пг у, О1.язей гаЫЙ); Описывает одномерный фильтр свертки со значениями пикселов, взятыми из буфера кадров. Команда В1сорусопчо1ч11опЕ111ег10О коппрует апай пикселов, начиная с позиции (х, у), и преобразует их в указанный внутренний формат. К заданному фильтру свертки могут быть применены масштабирование и отклонение (Ъ|аз). Значения масштаба и отклонения задаются командой В1Сопчо1и г)опРагаеетег» (). Причем никакой фиксации (с!агпр1пй) значений фильтра свертки после этого не делается. чоы я1сопчо1иг1опРзгааегег(1()(бъеппп1 гагяег, О) епит рпате, тУРератат); чоЫ В)сопчо1п11опРагааесег(1()ч(ОЪепшп Гагяес О(.еппш рпате, сопзг ТУРЕ "рагатз); Устанавливает параметры, управляющие выполнением операции свертки. Аргумент Гагяет должен быть задан одной из следующих констант: 6( СОМЧО) ОТ10М 10, 6С СОМЧОСОТ10М 20 или 6С 5ЕРАРАВСЕ 20.
Имя параметра (рпате) должно быть указано как 6( СОМЧОСОТ10М ВОРОЕР МОВЕ, 61 СОМЧОСТ10М Р1СТЕР 5САСЕ или 6( СОМЧО(ОТ10М Р1(ТЕР В1А5. Когда для рпате используется параметр 6( СОМЧОСОТ10М ВОРОЕР МОВЕ, подразумевается режим обработки границ свертки. В таком случае рогата устанавливается в 6С РЕООСЕ,ОС СОМ5ТАМТ ВОРОЕР или 6( РЕР(1САТЕ ВОРОЕР.
Если рпате задан как 6( СОМЧОСОТ10М Р1СТЕР 5САСЕ или 6( СОМЧО(ОТ10й Р1(ТЕР В1А5, массив рагатз должен содержать четыре значения цвета для красного, зеленого, синего и альфа-компонентов в этой последовательности. Расширение 1гпад)пд БОЬвег 303 дз ег. П- ки Матрица цвета е); 'РЕ гс ЕК Ко- (ра- сав- сли ОИ для сти. Особенности применения свертки на границах Операция свертки в отношении границ изображения отличается от обработки пикселов, лежащих во внутренней его области. Для управления применением свертки на границах предусмотрено три режима: ° 6! ЙЕООСЕ приводит к сжатию (зЪт1п)с) в каждом измерении согласно размерам фильтра свертки. Ширина результирующего изображения изменяется как (м(6(гл — Й//), а высота — как (//е(й/тг — Н ), тле )(// и Н/ — это ширина и высота фильтра свертки.
Если конечное изображение вырождается до нулевого или отрицательного размера, оно не вырабатывается, причем без сообщения об ошибке. я 6С СОИ5ТАИТ ВОКОЕЙ вЂ” для обработки краев изображения, для выходящих за его границы пикселов, используются константные значения, задаваемые командой к1сопуо1ц11опра г аме1е г ' () .
В зтом случае размеры изображения не меняются. ° 6( ИЕРС1САТЕ ВОКОЕК вЂ” свертка выполняется аналогично режиму 6С СОИ 5ТАЙТ ВОКОЕК, с той разницей, что к вычислениям привлекаются значения крайних пикселов ряда или столбца. Здесь размеры изображения также не меняются. Операции, дополняющие свертку После завершения процесса свертки к пикселам результирующего изображения мог) т быть применены масштабирование и смещение (Ъ1аз), а также преобразование х диапазону (О, 1]. Соответствующие значения указываются вызовом е1Ртхе1- Тгапвтег'(): 6С Р05Т СОИЧОСОТ10И ' 5САСЕ для масштабирования 6С Р05Т СОИЧОСОТ10И * В1А5 для отклонения.
Также можно изменить цвета пикселов по таблице подстановки, задав режим 6С Р05Т СОИЧОСОТ10И СОСОР ТАВСЕ коман- дой д1СО1огТаЬ)е(). С целью поддержки преобразований цветового пространства (перехода к другой цветовой модели) илн линейных преобразований значений пикселов, в расшире- нии 1шая(пя БОЪзес предусмотрен стек матриц с размерами 4 х 4, который начина- ет работать при вызове В\иасг)хнопе(6С СОСОК). Например, чтобы перейти от модели КСВ к СМЧ (голубой, фиолетовый, желтьй), вы можете сделать следую- щее: б(/1оат гаЬ2сму(181 = ( -1, 8, О, 8, 8, -1, 8, О, О, О, -1, О, 1.
1, 1, 1 ): 11Иасг(хИоце(6С СО(Ой); /* активация режима матрицы цвета */ 11(оаЕИвсгяхт(гХЬ2сжу); 11Иатг1хноое(бс ИООЕСЧ1ЕИ); /' возврат в режим макетной матрицы "/ 304 Глава В ° Вывод пикселов, битовых образов, шрифтов и изображений ПРИМЕЧАНИЕ Орепбс хранит матрицы по столбцам.
См. Раздел «Команды преобразования общего назначения» главы 3 для получения более подробной информации об использовании матриц в Орепбы В стек матриц цвета заносятся как минимум две матрицы. (См, раздел «Команды запроса» приожения Б.) В отличие от других операций !пса8(п8 8нЬзеС, преобразование по матрице цвета выполняется всегда и не может быть блокировано. Листинг 8.7 иллюстрирует использование матрицы цвета для обмена позициями красного и зеленого компонентов цвета. Листинг 8.1. Обмен компонентов цвета с использованием матрицы цвета: со(оггпа(пх.с ехгегп бсиьусе' гезо1вайе(соя!с сьаг*, 6(5(се!*, 6сз(се!'); 6СЬЬуте *р!хе15; 6С5(зе! н(ОСЬ.