OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 79
Текст из файла (страница 79)
Для близких к краевым координатам текстуры в массив 2 х 2 тексела могут быть выбраны текселы как с границы, так и из внутренней области текстуры. Если вы используете ограничивание, вам следует избегать краевых эффектов при юаимодействии текстуры и поверхности. Для этого используйте значения альфа- компонента 0 для краев (или границ, если они заданы) текстуры. Функция деколи непосредственно использует значения альфа-компонента текстуры в своих вычислениях. Если вы используете несколько функций текстур, может потребоваться также включить смешивание с подобающими факторами влияния для источника и приемника. (См. раздел «Смешивание» главы 6.) Чтобы увидеть эффект от обработки границ, вам следует рискнуть и задать координаты вне диапазона 10.0, 1.01.
Для начала возьмите пример из листинга 9.1 и измените координаты текстуры для квадратов с 0.0 на 4.0, как это сделано ниже: 11зеВ(п(6С ООА05); В1ТехСоогб2Е(8.8, 0.0); В1Неггех3Е(-2.8, -1.8, 0.0); В1ТехСоогб2Е(0.0. 4.0): В1ЧеггехЗЕ(-2.0, 1.8, 0.0); В1ТехСоогб2Е(4.0, 4.0); В1уегсех)Е(8.8, 1.9, 0.0); В1ТехСоогб2Е(4.0, 9.9); В1НегсехЗЕ(8.8, -1.8, 0.8); В)техсоогб2Е(8.8, О,О>; В(уеггех3Е(1.0. -1.О, 8.9>; В1ТехСоогб2Е(0.0.
4.0); В1Чегсех)Е(1.9, 1.0, 9.9); В1ТехСоогб2Е(4.0, 4.0); В1ЧегсехЗЕ(2.41421, 1.0, -1.41421); В1ТЕХСООГб2Е(4.0, 9,0); В1ЧЕГТЕХЗЕ(2.41421, -1.0, -1.41421); 11Епб(>; Для режима 6С КЕРЕАТ результат продемонстрирован на рис. 9.10. Здесь текстура дублируется сразу в двух направлениях, 3 и 6 это делают вызовы В1Тех Ра г а не Се г'(): 11техРагавегег1(6с техтОКЕ 20, 6с тЕХтцкЕ ИААР 5, 6( кЕРЕАТ); 11ТехРагаиегег((6С ТЕХТОКЕ 20, 61 ТЕХТОКЕ ИКАР Т, 61 КЕРЕАТ); Некоторые реализации Орепб).
поддерживают режим 6С М1ККОКЕО КЕРЕАТ, обращающий ориентацию целочисленных коорлинат текстур. На рис. 9.11 показана разница между обыкновенным размножением с переносом (слева на рисунке) и зеркальным повторением (справа). Рис. 9.11. Режим 61 КЕРЕАТ в сравнении с 66 М1ККОКЕО КЕРЕАТ Рис. 9.10. Повторение текстуры На рис. 9.12 продемонстрировано действие режима 6С ССАМР в применении к обо- им направлениям. В местах, где координата 3 или г болыпе единицы, используется тексел, взятый оттуда, где значение координаты текстуры в точности равно 1. 360 Глава 9 ° Наложение текпур Рис.
9.12. Ограничивание текстуры Режимы обработки границ по каждому направлению независимы. Вы вправе так- же применить ограничение в одном измерении и повторение для другого, как по- казано на рис. 9.13. Рис. 9.13. Размножение текстуры вместе с ограничиванием Теперь, после рассмотрения всех аргументов В1техрагаветег*(), суммируем все в одной подпрограмме. уо1с) 91техрагаветегЯ(С)епит гагдет, С|еппш рпате, ТУРЕ рахат)' уо1г) В1Техрагааетег(11)у(СЕепцш Гасящей С1.ещнп рпате, ТУРЕ "Рахат); Устанавливает различные параметры, управляющие обработкой текстуры, применением ее к фрагментам и сохранением в объекте текстуры.
Аргумент Гагяеувыбнрается из 6! ТЕХТОЙЕ 10,6! ТЕХТОЙЕ 20, 6! ТЕХТОЙЕ 30 или 6! ТЕХТОКЕ СОВЕ ИАР в соответствии с характером текстуры. Возможные значе. ния для аргументов рпате и рахат приведены в табл. 9.7. Вы можете задавать параметры по отдельности обычной версией команды, и в вашем распоряжении также ее векторная форма, работающая с массивом значений для случая 6! ТЕХТОЙЕ ВОйОЕЙ СОСОК. Если значения представлены целыми числами, они преобразуются в формат с плавающей запятой согласно табл.
4.1; кроме того, они ограничиваются диапазоном 10, 11 Таблица 9.7. Аргументы команды 4техРвгате1ег*() Значения Параметр 6! ССАИР,6! ССАМР ТО ЕООЕ,6! ССАМР ТО ВОЙОЕЙ,О! ЙЕРЕАТ, 6! М[КЙОЙЕО КЕРЕАТ 6! ССАМР,6! ССАИР ТО Е06Е,6! С!АМР ТО ВОКОЕй,6! КЕРЕАТ, 6! М1ККОКЕО КЕРЕАТ 6! С1АМР, 6! С!АМР ТО Е06Е, 6! ССАИР ТО ВОКОЕК, 6! КЕРЕАТ, 6! М1ККОКЕО КЕРЕАТ 6$ МЕАКЕ5Т,6! С!НЕАЙ 6! ТЕХТОКЕ )УВАР 5 6! ТЕХТОКЕ ЬУКАР Т 6! ТЕХТОЙЕ ЪУЙАР й 6! ТЕХТОКЕ МА6 ЕП.ТЕК Значения Параметр 6! ТЕХТОРЕ М)И Р1СТЕР Упражнение Рисунки 9.12 и 9.13 получены с исгюльзованием б! ИЕАРЕ5Т для фильтров уве- личения и миниатюризации.
Что же произойдет, если вы изме»гите это значение ка б! С1ИЕАР? Результирующее изображение должно выглядеть не таким рез- иим. Информация границ может потребоваться во время обсчета текстурирования. Для простейшей демонстрации этого установите б! ТЕХТОРЕ ВОРОЕР СОСОР в хорошо заметный цвет.
Установив фильтры в б! ИЕАРЕ5Т и режим обработки границ 6! ССАИР ТО ВОРОЕР, оцените эффект от цвета границы текстуры на текстурируемый объект (для диапазона координат текстуры вне [О, 1]). Граница также оказывает воздействие на текстурирование с фильтрами б! С1ИЕАй и режимом обработки границ б! ССАИР. Что теперь случится, если включить режим б! ССАИР ТО Е06Е или б! РЕРЕАТ? Для обоих случаев цвет границы игнорируется. ПОсобие по текстураи от Нэйта Робинса Запустите пособие по текстурам Нэйта Робинса и оцените влияние параметров 6! РЕРЕАТ и б! ССАИР. Для этого вам может потребоваться сделать текстурные координаты вершин (аргументы ВТТехсоо гс(2( () ) меньше 0 и/или болыпе 1.
Автоматическая генерация координат текстур Вы можете использовать наложение текстур для образования контуров своих моделей или для имитации отражения от произвольного окружения для «зеркальаой» модели. Чтобы достигнуть этого эффекта, позпольте ОрепС[. генерировать вюрдинаты текстур за вас, вместо явного их задания командой В!Техсоогв'(). Я ТЕХТОРЕ ВОРОЕй СО!Ой 61„ТЕХТОРЕ Рй!ОЙПН 6! ТЕХТОРЕ М1И СОО 6! ТЕХТОРЕ МАХ ЕОО б! ТЕХТОРЕ ВА5Е СЕНЕ! 6! ТЕХТОРЕ МАХ СЕНЕ! б! ОЕРТН ТЕХТОРЕ МОВЕ 6! ТЕХТОРЕ СОМРАРЕ МОВЕ Б! ТЕХТОРЕ СОМРАРЕ„РОЙС 6! 6ЕИЕЙАТЕ М1РМАР Автоматическая генерация координат текстур 361 б! ИЕАРЕ5Т,О! С1ИЕАР,6! ИЕАРЕ5Т М!РМАР ИЕАРЕ5Т, б! ИЕАРЕ5Т М1РМАР С1ИЕАР, б! С)ИЕАР М1РМАР ИЕАРЕ5Т, б! С1ИЕАР М1РМАР !1ИЕАР Любые четыре числа из диапазона [0,0; 1,0) [0,0; 1,0[ для текущего объекта текстуры Любое значение с плавающей запятой Любое значение с плавающей запятой Любое неотрицательное целое Любое неотрицательное целое б! СОМ!ИАИСЕ,6! 1ИТЕИ51ТУ, б! АСРНА б! ИОНЕ,6! СОМРАРЕ Р ТО ТЕХТОРЕ 6! СЕООАС б! 6ЕООА! 6! ТРОЕ, 6! ЕА!5Е 362 Глава 9 ° Наложение текпур Чтобы сгенерировать координаты текстур автоматически, используйте команду к1Тех6еп().
чоЫ ВТТех6еп(1И)(С!.епцш соог«(, 01.еппш рпате, ТУРЕ рахат). чо1о яТТех6еп(1Щч(С1 епшп сооп1, С1епц|п рпате, ТУРЕ *рахат); Задает функции для автоматической генерации координат текстур. Первый аргумент, соог 1, должен быть задан как 6 С 5, 6 С Т, 6 С Н или 6 С О согласно типу генерируемой координаты — я 6 г или х).
Значение аргумента рпате выбирается из констант 6С ТЕХТОНЕ 6Ей НООЕ, 6С ОВ)ЕСТ РСАМЕ или 6С ЕТЕ РСАМЕ. Если зто 6С ТЕХТОНЕ 6ЕМ НООЕ, аргумент рахат должен быть целым числом (или, для векторной версии команды, должен указывать на целое число), одним из следующих: 6С ОВЛЕСТ С1МЕАН, 6С ЕУЕ С1МЕАР, 6С 5РНЕНЕ НАР, 6С НЕРСЕСТ10М НАР или 6С МОННАС НАР. Эти символические имена определяют, какая функция будет использоваться для порождения координат текстур. Для других допустимых значений рпате аргумент рахат является указателем на массив значений (векторная версия), задающих параметры генерирования. Для различных областей применения используются различные методы генерации координат текстур.
Указание опорной плоскости (ге)егепсе р!апе) в координатах объекта предпочтительно тогда, когда изображение текстуры остается привязанным к движущемуся обьекту. Таким образом, константа 6С ОВ)ЕСТ С1МЕАх может быть использована для покрытия древесными прожилками площадки, Задание опорной плоскости в координатах наблюдателя (6С ЕТЕ С1МЕАН) — лучший способ для получения контуров линий подвижных объектов. Параметр 6С ЕУЕ С1МЕАН находит применение у специалистов в области геологических наук, которые занимаются нефтедобычей или газодобычей.
Так как бур проходит сквозь земную кору, могут понадобиться различные цвета для представления срезов по. роды с ростом глубины. Параметры 6С 5РНЕНЕ НАР и 6С НЕРСЕСТ10М НАР главным образом используются для наложения сферообразного окружения, а 6С МОкНАС НАР— для «кубических» карт текстур. (См. разделы «„ Сферические" карты» и «„ Кубические" текстуры»). Создание контуров Когда заданы параметры 6С ТЕХТОРЕ 6ЕМ НООЕ и 6С ОВОЕСТ С1МЕАН, функция генерации является линейной комбинацией значений вершин в координатах объекта (х„у„, г„, ю„): сгенерированная координата = р, х„+ р,у„+ р,г„«р,т..
Значения рв..., р4 передаются в аргументе рахат команде кТТехбеп«ч (), с рпате, установленным в 6С ОВ)ЕСТ РСАМЕ. С корректно нормализованными рь..,, р, зта функция выдает расстояние от вершины до плоскости. Например, если р,- .= р, = р4 = О и р, = 1, зто расстояние х = О. Оно положительно с одной стороны плоскости и отрицательно с другой, и равно нулю, когда вершина принадлежит плоскости. Автоматическая генерация координат текстур 363 В листинге 9.8 первым делом рисуются равно дистанцированные линии чайника; оня указывают расстояние от плоскости х - О. Коэффициенты для такой плоскости помещены в массив: ч!а!>с 6СЕ1оа! кечиа1гего(] = (1.9, 9.9, 0.9, 0.9); Поскольку здесь показывается только одна свойство (расстояиие от плоскости), достаточно одиомериой текстуры, Карта текстуры имеет сплошную зеленую окраску, за исключением красных меток для равноотстоящих интервалов.
Так как чайник находится в плоскости яз(, все контуры перпендикулярны их основанию, На цветном рис. 18 показана картинка, полученная этой программой. Здесь Нажатие клавиши 5 изменяет параметры плоскости отсчета иа ч!а!чс 6С(]оат я>аптоб(] = (1.0, 1.О, 1.О, О.Э>; Полосы контуров параллельны плоскости х + у + г - О, и пересекают чайник под углом, как показано иа цветном рисунке 18. Чтобы восстановить исходные зиачеввя, х = О, нажмите клавишу х. Листинг 9.8.