М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 77
Текст из файла (страница 77)
9А; к 1' — значение для поступившего на обработку фрагмента; ° с — значения, связанные с 6С ТЕХТОМЕ ЕМЧ СОСОй; >а- ен пе- пе- ° отсутствие нижнего индекса — конечное вычисленное значение. В зтих таблицах под умножением триплета цветов на скалярные значения пони- юется умножение каждого нз КСВ-компонентов на скалярную величину; пере- кпожение (или сложение) двух цветов из триады означает умножение (сло- жение) каждого компонента второй тройки на (с) соответствуюший компонент первой. да 00 )азуп ой Тпблица 9.5. Функции текстур, предназначенные для замещения, модуляции и техники деколи Основной внутренний 6С МЕРСАСЕ 6С М000САТЕ 6С ВЕСАС Впрмат би- ур юта, ли Вы гы за ия ие ри >ю Я 6( АСРНА 61 ШМ!МАМСЕ 61 ШМ1МАМСЕ АСРНА 61 !МТЕМ5!ТУ 6! 06В 61 060А 61 АСРНА 6 ШМ1МАМСЕ 61 ШМ1МАМСЕ АСРНА В.
1МТЕМ51ТУ й 060 61 ИОВА (О, О, О, А) ($ 0 1, 1) (1,0 СА) (1, 1, 1, 1) (й, 6, В, 1) (й,6, В, А) С СНА-А, С-С„А-А, С Сн А А, С СдА-С, С=С„А-А, С-С„А=А, С - С,; А = А,А, С - С, С,„ А - А, С СуС„А Ау А, С-С,С„А-А,С, С-С,С„А-А, С-С С„А-А А, Не определено Не определено Не определено Не определено С С„А А С С (1-А)чС,А„А А 354 Глава 9 ° Наложение текстур Таблица 9.6.
Алдитиеная функция и функция для смешивания 61 АОО Основной внутренний формат 6С ВСЕЙО С-С;, А-А/А, С С/»С„А=А/ С-С/»С„А-А/А, С С/+С„'А А/+А, С С/,' А А/Ая с/(Т-с,)+с,сд А-А/ с-с,(т-с)+с,си А-А,А, с-с,(1-с)+с,сд А А/(1 — А,) + А, А, с с (1-С)+с,си А А с с/(1 — с,) + с, ск А А/А, 66 АСРНА 6С СОИ1ЙАЙСЕ 6С СОИ1ЙАЙСЕ АСРНА 6 1ЙТЕЙ51ТУ С-С,+С„А-А, С-С,+С„А=А,А, 6С В6В 6С Д6ВА Функция деколи (с(еса1) напоминает случай замещения с той разницей, что она работает только для внутренних форматов КбВ и КСВА и обрабатывает альфа- компонент иначе.
В варианте с КСВА цвета фрагментов смешиваются с цветом текстуры в пропорции, определяемой альфа-компонентом текстуры, а альфа- компонент фрагментов не изменяется, Данная функция может быть использована для взвешенной по альфа-каналу текстуры, такой как эмблема на крыле самолета. При модуляции цвета фрагментов модулируются содержимым текстуры. Если в качестве базового внутреннего формата выбран 6С СоН1ЙАЙСЕ, 6С СЦН1ЙАЙСЕ АСРНА или 6С 1ЙТЕЙ51Ту, значения цвета умножаются на некоторое значение, так что карта текстуры выводит производную по определенному закону от значения цвета фрагмента (если яркость или интенсивность равна 1) до черного (если это 0).
Для внутренних форматов 61 Й6В и 61 Й6ВА каждый компонент входящего цвета умножается на соответствующее (возможно, другое) значение текстуры. Если это значение альфа-компонента, оно умножается на значение альфа-компо. нента фрагмента. Модуляция особенно хороша в условиях освещения, так ках цвет освещенного многоугольника может быть использован для затухания цветя текстуры. Большинство примеров, иллюстрирующих наложение текстур, наносят «покрытие» с помощью модуляции именно по этой причине.
Белые, «зер. кальные» многоугольники часто используются для воспроизведения освещеннык текстурированных объектов, а изображение текстуры обеспечивает рассеивание цвета. Аддитивная функция просто складывает цвет текстуры с цветом фрагмента. Если это значение альфа-компонента, оно умножается на значение альфа-компоненте фрагмента, кроме случая формата 6С 1ЙТЕЙ51ТУ, где складываются интенсив.
ность текстуры и значение альфа-канала фрагмента. Если не отнестись со всеи вниманием к выбору такой функции, можно получить в результате пересыщевные или неправильные тона. Функция с замещением просто берет цвет, который был бы использован для окраски в отсутствие какого-либо наложения текстур (цвет фрагмента), попросту отбрасывает его и замещает цветом текстуры. Вы используете функцию замещения в ситуациях, когда к объекту нужно применить непрозрачную текстуру — например, при рисовании объекта с непрозрачной этикеткой.
Присвоение координат текаур 355 Функция смешивания единственная из всех использует цвет, заданный параметцом 6( ТЕХТОРЕ ЕИЧ СОСОК. Использование значения яркости, интенсивности или цвета отчасти напоминает использование значения альфа-компонента для смешивцния цвета фрагмента с 6( ТЕХТокЕ ЕМЧ СОСОи. (См. «Пример смешивания» в главе 6, демонстрирующий технику билбординга (Ь|11Ьоагг(1пй).) Пособие по текстурам от Нэйта Робинса Если вы загрузили пакет программ самоучителя Нэйта Робинса, запустите пособие по текстурам.
Изменяйте атрибуты среды наложения текстур и смотрите на цффект, производимый различными функциями текстур, Когда дело дойдет до »( ИОРОСАТЕ, обратите внимание на эффект для цвета, указанного 61со1ог4( (). Экспериментируя с 6С ВСЕМВ, смотрите, что получится при изменении цвета, заццваемого массивом еио со1ог.
Присвоение координат текстур Отображая свою сцену с наложением текстур, вы должны подготовить координаты объекта и координаты текстур для каждой вершины. После преобразования ццординаты объекта определяют местоположение вершин на экране. Координаты шкстуры отвечают за то, какой тексел в карте текстуры будет связан с каждой мршиной. Подобным образом происходит интерполяция цвета межлу двумя вершинами тонированного многоугольника или линии, и также интерполируются юординаты текстуры. (Вспомните, что текстура — это обычный прямоугольный ццссив данных.) Координаты текстуры могут вмещать в себя одну, две, три или четыре координаш. Обращение к ним производится обычно как к з-, гъ г- и ц-координатам с цецьп их различения от координат объекта (х, у, г и гв) и параметрических коордиццт (и и гл см.
главу 12). Для одномерных текстур вы используете з-координату; вш двухмерных — з и й а для трехмерных — ж ( и г. Координата д, подобная ге, цбычно задается значением 1 и может быть использована для получения одно)вциых координат; это описано в разделе «Координата д». Команла ц1 тех С со ге * (), мцшощая координаты текстуры, аналогична 61Чегсех«(), к1со(ог*О и 11когва1* Π— все эти разновидности команд используются одинаково между 11веццо () и к1Е ос () . Обычно диапазон значений координат текстур ограничен О ц1; тем не менее возможны и выходящие за этот диапазон значения, как это опиано в разделе «Повторяемые и обрезанные текстуры». тоЫ В)техсооге(12341(з1(г))(ТУРЕ сооп6); тоЫ ц1техсоогг)(123«)(э1И)«(ТУРЕ «соог«Ь); Устанавливает координаты текущей текстуры (з, г, г, д). При последу|ощих вызовах ц1Че ггех* () вершины будут связаны с координатами текстуры.
Команда 61ТехСоогп1*() устанавливает значение зкоординатьь Г и г сбрасываются в О, а о устанавливается единицей. С помощью команды к1техсоогО2 «() вы задаете з и г; г и д устанавливаются в О и 1 соответственно. Команда ц1ТехсоогОЗ" () устанавливает г) в 1, а остальные инициируются согласно за- 356 Глава 9 ° Наложение текстур паиным значениям. Задать явно все координаты сразу позволяет команда 61техСоогп4' (). Используйте соответствующий суффикс (з, 1, Г или о) и значение типа тУРе(66эьог т, 661 от, 61(1оак или 61ооив(е) для уточнения типа ланных координат.
Вы можете подготовить все координаты по отдельности, а можете и использовать векторную версию команды, чтобы сделать это из одного массива. Координаты текстуры умножаются на 4 х 4 матрицу текстуры перед тем, как будет выполнено наложение текстур. (См, раздел «Стек матриц текстур».) Обратите внимание, что целочисленные координаты текстуры интерпретируются непосредственно, а не проецируются в диапазон (-1, 1]. В следующем разделе объясняется, как рассчитать соответствующие координаты текстур. Вместо явного их присвоения вами, можно воспользоваться средствами ОрепОБ для автоматического их вычисления. (См. раздел «Автоматическая генерация координат текстуры) Пособие по текстурам от Найта Робинса При наличии у вас самоучителя Нэйта Робинса запустите пособие по текстурам и экспериментируйте с параметрами ~1техСоогс(2(О для четырех различных вершин. Посмотрите, как можно наложить часть полной текстуры.
Что случится, если вы сделаете координаты текстуры меньше 0 илн больше 17 Вычисление подходящих координат текстуры Двухмерные текстуры — это квадратные или прямоугольные изображения, которые обычно проецируются на многоугольники, образующие полигональную (ро!уяоп— многоугольник) модель. В простейшем случае вы отображаете прямоугольник текстуры в такую же «прямоугольную» модель — например, нашей текстурой может быть сканированное изображение кирпичной стены, и ваш прямоугольник может представлять один кирпич в кладке.
Для простоты предположим, что кирпичная стена имеет квадратную форму и текстура тоже квадратная, и вы желаете наложить всю текстуру на всю стену. Координаты текстуры — (О, 0), (1, 0), (1, 1) и (О, 1) обходятся против часовой стрелки. Рисуя стену, просто задайте зти координаты как координаты текстуры, когда указываете координаты вершин стены, в порядке против часовой стрелки.