OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 60
Текст из файла (страница 60)
В случае битовых образов (или одноразрядных изображений) выравнивание производится аналогично, с той разницей, что обрабатываются не байты, а биты, Так, если за пиксел отвечает всего один бит, длина строки равна 75 и выравнивание производится по значению 4, каждая строка требует для себя 75/8, то есть 9 3/8 байта. Поскольку 12 является наименьшим числом, одновременно кратным 4 и большим числа 9 3/8, каждый ряд будет занимать в памяти 12 байт. Если параметр выравнивания равен 1, будут использоваться 10 байт каждой строки, то есть округленное вверх значение 9 3/8.
(Пример применения к1Р)хе151оге1 О см, в листинге 84.) ПРИМЕЧАНИЕ Значение по умолчанию для параметра»Яс16ММЕМТ равно 4. Допущение, что данные изображения плотно упакованы и выровнены по байтовой границе (»Я»16ММЕМТ равно 1) — вес»ив часто встречаемая ошибка. Параметры *1НА6Е НЕ16НТ и *5К1Р 1НА6Е5 имеют смысл только в отношении трехмерных текстур. (См. раздел <Режимы хранения пикселов для трехмерных текстур» главы 9.) Операции при передаче пикселов Во время передачи данных из памяти в буфер кадров (или наоборот) Орепбс может производить над этими данными некоторые действия.
Например, изменяются диапазоны для компонентов — обычно значения красного компонента находятся в интервале от 0 до 1, но вы можете предпочесть для них другой диапазон; илн возьмем случай, когда данные того же красного компонента в разных графи.
ческих системах сохраняются в отличных друг от друга диапазонах. Вы можете создавать карты (пхарз) для выполнения произвольных преобразований над ин. дексом цвета или компонентами цвета. Такие преобразования выполняются во время передачи пикселов в (из) буфер кадров и соответственно называются (р(хе! ггапз(ег орегабовз). Отвечают за такие преобразования команды а1Р)ке1Тгапзтег'() и к1Р1ке1Нар*п. Хотя буферы цвета, глубины и трафарета имеют много общего, они не ведут себя идентично и в некоторых режимах имеют свою специфику. Мы подробно рассмотрим все режимы, включая их специальные случаи, в этом и следующих разделах.
Часть характеристик устанавливается с помощью к1Р)хе1Тгапз1ег*(), а часть— указывается посредством 81Р1хе1Нар*п, обсуждаемой в следующем разделе. Конвейерная обработка изображений 283 чо1с) В\Р1хе\Тгапзтег((()(б(.епигп рпагпе, ТгРЕрагат). Устанавливает режимы передачи пикселов, воздействующие на выполненне 610ганР1хе1з(), В!КеаОР1хе1з(), В1СоруР1хе!з(), 61Тех1вайе10(), В!Тех1вайе20(), 61тех1ваВе30(), В!Сорутех1вабе10(), 61СоруТех1вабе20(), 61Тех5иЫвайе10(), 61Тех5иЬ1вабе20(), В1Тех5иЫваВе30(), 61Сорутех5иЫвабе10(), к1СоруТех5иЫвабе20(), 61Сорутех5иЫвайе30() и 616етТех1вайе().
Аргумент рпагпе принимает одно из значений, перечисленных в первом столбце табл. 8.5, а значения аргумента рагагп должны быть в допустимом диапазоне, как показано в той же таблице. Таблица В.В. Параметры команды д! Рсхеп'гапз(ег*() Значение Допустимый инициализации диапазон Тип Кивание параметра 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.