М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 61
Текст из файла (страница 61)
Таблица В.В. Параметры команды д! Рсхеп'гапз(ег*() Значение Допустимый инициализации диапазон Тип Кивание параметра 6! МАР СОСОК 6! МАР 5ТЕМСП. 6! 1МОЕХ 5Н1ГТ 6! 1МОЕХ ОГГ5ЕТ 6! КЕО 5САСЕ 6! 6КЕЕй 5САСЕ 6! ВСОЕ 5САСЕ 6! АСРНА 5САСЕ й РЕРТН 5САСЕ 6! КЕО В1А5 6! 6КЕЕМ В1А5 6! В!ОЕ В1А5 6! АСРНА В1А5 6! ОЕРТН ВТА5 6! Р05Т СОМЧОСОТТОМ ЙЕО 5САСЕ 6! Р05Т СОИЧОСОТ10М 6ЙЕЕМ 5СА!Е 6! Р05Т СОМЧОСОТ10М В!НЕ 5САСЕ 6! Р05Т СОМЧОСОТ10И АСРНА 5САСЕ 6! Р05Т СОИЧОСОТ10М КЕО В1А5 6! Р05Т СОМЧОСОТ1ОМ 6КЕЕМ В1А5 6! Р05Т СОМЧОСОТ10й„В!НЕ В1А5 6! Р05Т СОМЧОСОТ10М АСРНА В1А5 6! Р05Т СОСОК МАТК1Х ЙЕО 5СА!Е 6! Р05Т СОСОК МАТК1Х ОВЕЕМ 5САСЕ й Р05Т СОСОК МАТЙ1Х В!НЕ 5СА(Е 6! Р05Т СОСОК МАТЙ1Х АСРНА 5САСЕ 6! Р05Т СО(ОЙ МАТК1Х ЙЕО В1А5 6! Р05Т СОСОК МАТЙ1Х ОВЕЕМ В1А5 6! Р05Т СОСОК МАТК1Х В(ОЕ В1А5 6! Р05Т СОСОК МАТЙ1Х АСРНА В1А5 6СЬоо(еап 6СЬоо(еап 6С)п! б!)и! 61йоа! б!йоас 66йоа! 6!два! 6Сйоа! 61йоа! 6!1!оа! 6(йоа! 6Сйоа! 6(йоас 6Сйоа! 6Сйоат 6Сйоаг 6(йоа! 6(йоа! 66йоа! 66йоа! 6!два! 66йоат 6Ейоа! 6(йоа1 66йоат ОСйоа! 61йоа! 6Сйоа! 66йоат ГАС5Е ГА!5Е 0 0 1.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 1.0 1.0 1.0 1.0 0.0 0.0 0.0 0.0 ТВОЕ/ГАС5Е ТВОЕ/ГАС5Е (-со, со) (-со, аа) (-аа, со) (-сос со) (-со, со) (-со, со) (-ах ао) ( — со, со) ( аа,со) (-со, со) (-со, со) (-аа, со) (-со, со) (-оа, ао) (-со, со) (-со, со) (-аа, со) (-со, со) ( — аа, со) (-со, со) (-со, аа) (-со, аа) (- со) (-со, со) (-со, ао) (-со, со) (- ') (-со, со) 284 Глава В «Вывод пикселов, битовых образов, шрифтов и изображений ВНИМАНИЕ Параметры 6С Р05Т СОННО«ОТ!ОН * н 6С Р05Т СОСОй МАТй!Х * имеют смысл, если ваша реализация Орепбк поддерживает конвейеризацию обработки изображений.
(См. раздел «Рас. шнренне !свай~яр 5цбвебн) Если параметр 6С ИАР СОЕОй или 6Е ИАР 5ТЕИС1Е установлен в ТВОЕ, доступно табличное преобразование (шарр)пй). Табличное преобразование рассматривается в следующем подразделе. Все остальные параметры непосредственно относятся к компонентам пикселов.
Масштабирование (зса!е) и отклонение (Ь(аз) применимы к красному, зеленому, синему, альфа-компонентам и к глубине. Например, можно масштабировать компоненты КСВ в процессе свеления их к яркости. Яркость вычисляется как сумма красного, зеленого и синего цветов, поэтому, если вгя используете для них значения по умолчанию (6С йЕО 5САЕЕ, 6Е 6йЕЕН 5САСЕ и 6С ВСОЕ 5САЕЕ), каждый из компонентов внесет свой вклад в значение результирующей интенсивноста (яркости).
Если преобразование из модели КСВ к яркости выполняется согласно стандарту !чТЗС, нужно устанавливать компоненты в конкретные значения: 61 йЕО 5САСŠ— О.З, 61 6йЕЕЙ 5САСŠ— 0.59 и 6С ВЕОЕ 5САЕŠ— 0.11. Индексы (цвета и трафарета) также могут быть преобразованы. В этом случае применяются сдвиг (зЬ1(г) и смещение (оГ!зек). Это полезно, если вам нужно управлять частью таблицы цветов, принимающей участие в построении изображения. Табличные преобразования пикселов Все компоненты цвета, индексы цвета и трафарета могут быть модифицированы с помощью таблиц подстагговки (гаые 1оо)сцр) перед их помещением в видеопамять.
Этот процесс называется табличным преобразованием (!парр)пй) и управ. ляется командой В1Р1хе1Иар*(). уоЫ В1Р1хетнар(п1 цз т)х(С1.епцщ тар, Сййпк тара(эе, сопят ТУРЕ "па!иек); Загружает пиксельную карту (таблицу) тар, состояшуко из тара!ге элементов, соответствуюгпих значениям (массива) па!иеа Таблица В.б содержит список названий карт и значений; по умолчанию все размеры считаются равными 1, а значения — О. Размер каждой карты должен быть степенью 2. Таблица В.б. Названия н значения аргументов команды В!Р)хе!Мар«() Значение Адрес Название карты Индекс цвета Индекс трафарета й Индекс цвета Индекс трафарета Индекс цвета Индекс цвета Индекс цвета Индекс цвета й бс Р1ХЕ),МАР ! ТО 1 6с Р1ХЕС МАР 5 ТО 5 6! Р1ХЕс МАР 1 ТО й 6! Р!ХЕ! МАР 1 ТО 6 6Е Р1ХЕ! МАР 1 ТО В 61 Р!ХЕ« МАР 1 ТО А 6С Р1ХЕЕ МАР й ТО й Конвейерная обработка изображений 285 Значение Адрес Ниааиие карты 6( Р1ХЕ( МАР С ТО С 61 Р1ХЕ! МАР В ТО В 6( Р1ХЕ(,МАР А ТО А Максимальный размер карт машинно-зависим.
Вы можете узнать, какие размеры пнксельных карт поддерживаются на вашей машине, с помощью команды 616е(1пгепегх(). Если нужно узнать размер по всем картам, используйте лля запроса параметр СЕ ИАХ Р1ХЕс ИАР ТАВ(Е, и используйте параметр СЕ Р1ХЕ( НАР * ТО * 511Е, чтобы узнать текущий размер конкретной карты. Для шести нарт, адресуемых индексом цвета или трафарета, подразумевается размер, кратный степени 2. Четыре РСВА-карты могут иметь любой размер от 1 до значения 6( ИАХ Р1ХЕЕ ИАР ТАВсЕ.
Чтобы понять, как работают таблицы, рассмотрим простой пример. Предполонны, что вы хотите создать 256-элементную таблицу, отображающую индекс цвенс индекс цвета с помощью параметра СЕ Р1ХЕс ИАР 1 ТО 1. Вы создаете табпнпу с элементами лля каждого нз значений в лиапазоне 0-255 и инициируете ее пссредством В1Р1хе1нар*(). Допустим, что вам нужна таблица для пороговой сбработки (гоген)1о!сйпй), инлексы, меньшие 101 (0-100), требуется установить в В,ассе индексы от 101 — заменить числом 255.
В этом случае ваша таблица будет кхтоять из 101 нуля и из 155 чисел 255. Чтобы сделать пиксельную карту досгупной, используйте 81Р1хе1Тгаозтег»(), установив параметр С( ИАР СОЕОВ в 1ППЕ. После того как пиксельная карта загружена и доступна, все исходные цвегсные индексы могут быть преобразованы: те, которые меньше 101, станут нулина, а принадлежащие диапазону 101 — 255 отобразятся в 255. Если исходный инжпс больше 255, он сначала маскируется числом 255, то есть сбрасываются все 6нты старше гюсьмого, а результирующее значение замещается числом из таблипы. Если исходный индекс представлен числом с плавающей запятой (скансн, 88,14585), он будет округлен до ближайшего целого значения (давая в итога 88), и тогда уже этот номер ищется в таблице (получаем О). Используя пиксельные карты, вы можете также отображать инлексы трафарета нпп преобразовывать индексы цвета в модель ВСВ.
(См. раздел «Чтение и рисомнпе прямоугольных областей» для получения информации о преобразовании ннпексов.) Гистяжение, сжатие и зеркальное отражение изображений Песне применения режимов сохранения пнкселов и операций при перелаче пиксыон изображения и битовые образы растеризуются. В простом варианте каждоау пнкселу изображения соответствует один пиксел экрана. Вместе с тем вы нправе произвольно увеличивать н уменьшать изображение и даже зеркально отрскать (Йцн ге(!ес() его с помощью команды В1Рпхе17ооа().
286 Глава 8 ° Вывод пикселов, битовых образов, шрифтов и изображений чоЫ я1Р1хе1Еоо«с(СЕ[)оаС гоотх, СЕ([оаС гооту); Задает коаффициенты растяжения (шайи[(у) и сжатия (тес[псе) для операций записи пикселов (к10гаиР]хе1з () и к! СоруР]хе1з () ) по горизонтали и вертикали. По умолчанию значения гоот„н аоот„устанавливаются в 1.
Так, если оба значения равны 2,0, каждый пиксел изображения рисуется четырьмя пнкселами экрана. Заметьте, что допускаются дробные значения факторов масштабирования, а также отрицательные. Г[оследние служат для зеркального отражения изображения относительно текущей позиции растра. Во время растеризации каждый пиксел изображения интерпретируется как прямоугольник с размералси гоот„х гоот„сс фрагменты генерируются для всех пикселов, центры которых находятся в пределах этого прямоугольника. Если говорить более точно, (х; у ) является текущей позицией растра. Если определенная группа элементов (индексов или компонентов) строки п принадлежит столбцу т, рассматриваемая нами область в оконных координатах ограничена прямоугольником с углами (х е зоот» х л, у, + гоотх х т) н (х„+ аоот„(л + 1), у + зоот„(т + 1)).
Все фрагменты с центрами внутри прямоугольника (или на нижней или левой границе) ставятся в соответствие означенной группе элементов. Отрицательные значения гоот используются при зеркальном отражении изображений. ОрепСЕ описывает изображения в направлении от нижнего ряда пиксе. лов к верхнему (и слева направо). Если вы имеете изображение вида «сверху вниз», такое как видеокадр, вы можете захотеть воспользоваться операцией к1Р]хе1200«с (1.0, 1.0), чтобы получить из изображения правильное с точки зрения ОрепС[..
Убедитесь, что вы задали верную текущую позицию растра, если это требуется. Листинг 8А демонстрирует использование к1Р]хе1Еоое О. Изображение шахматной лоски изначально находится в левом нижнем углу окна. При нажатии кнопки мыши или при передвижении мыши вы можете использовать к16оруР(хе1б() для копирования изображения пз исходного положения в окне в точку, соответ. ствующую положению указателя мыши.
(Разумеется, копировать изображение само в себя не имеет смысла!) Копируемое изображение масштабируется; пе умолчанию с коэффициентом 1.0, но вы вправе задать другое значение. Клавиша х и 2 связаны с увеличением и уменьшением коэффициента лсасштабирования вз значение 0.5.
Любое «повреждение» содержимого окна влечет за собой перервсовку последнего. Нажатие клавиши г сбрасывает коэффициенты в первоначаль. нос состояние. Листинг 8.4. Рисование, копирование и масштабирование пикселов; кпайе.с №Ье11пе свесь]еакеисЕСЬ 64 №Ее11ле сьесх[яэзеНе!кЬС 64 6(ььу(е сьесх1ваае[сьесх]еааеНе1№ЬС] (свеев]еабен!ЕСЬ] [3]; зСаС]с 6[ооише соовбасСог = 1,0: 5СаС]с 6Ь(ЬС Ье1ХЬС: 288 Глава 8 ° Вывод пикселов, битовых образов, шрифтов и изображений Листинг Вгф (продолжение) чотб Кеуооагб(цпз)Хлеб сьаг Кеу, !п1 х, 1пс у) ( зи!ссп (!сеу) ( сазе 'г': сазе 'й': зоовуас1ог = 1.0; ХсцСРозтаеб!зр!ау(); рг1п11("масштабный козффициент сброшен в 1.01п"); Ьгеан; сазе хоовгасСОГ е= 0.5; 1! (соовгассог >= 3.0) хоовйасгог = 3.8; ргтпС!("текущее значение масштабного коэффициента Х4.