OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 67
Текст из файла (страница 67)
Версия 1.2 к нпм добавила; ° трехмерные изображения текстур; ° новый режим управления координатамп текстуры, 6С ССАИР ТО Е06Е, вырабатываюший текселы из крайних пикселов изображения текстуры, но не из его границ; ° усиленный контроль над текстурами при использовании множественного отображения для представления различных уровней детализации (1ете!з о( оега11, 100); ° вычисление отраженного света после операций текстурирования.
Версия 1.3 подарила еше больше новых операций: ° сжатие текстур; ° текстуры, представленные кубами (спЬе шар); ° мультитекстурирование, когда несколько текстур используется при построении одного примитива; ° режим 6С ССАИР ТО ВОДОЕМ; ° режимы наложения окружения: 6С АОО и 6С СОИВ1НЕ (включая скалярное произведение). Всрсия 1А предоставила в ваше распоряжение следуюшие возможности: ° режим 6С И1ЙЙОКЕО кЕРЕАТ; ° автоматическая генерация М1Р-текстур с помо|цью 6С 6ЕИЕВАТЕ И1РИАР; ° параметр 61 ТЕХТОЙЕ СОО В1А5, предназначенный для изменения уровня детализации текстур; ° применение вторичного цвета (указываемого В15есопдагуСо1ог*()) после текстурирования; ° возможность использовать цвета из различных модулей текстур в качестве исходных, в процессе комбинирования текстур; 314 Глава 9 ° Наложение текстур я использование глубины (г-корлината) в составе внутреннего компонента формата текстуры и режимов текстурирования, сравнивающих глубину текселов для принятия решения об отображении текстур.
Если вы попытались использовать одну из этих операций и не нашли ес, проверьте номер версии своей реализации Орепо(.. (См, раздел «Какую версию я использую?» главы 14). В некоторых реализациях определенная функция может быть доступна только через расширение. Например, в версии Ореном 1.2 мультитекстурирование одобрено АКВ (Агс)пз гесгше Кенезч Воап), совет, рецензирующий архитектуру ОрепС1) как необязательное дополнение. В реализации 1.2 поддержанные функции мультитекстурирования и названия констант имеют суффикс АКВ, например к1Аст1четехтвгеАЙВ(бс тЕХт0КЕ1 АКВ) . В ОрепС1.
1.3 мультитекстурирование стало неотъемлемым элементом, и суффикс АкВ был удален. Общий обзор и пример Этот раздел содержит краткий обзор действий, необходимых для наложения текстур. Здесь также представлен пример относительно простой программы, выполняющей наложение текстур. Конечно, вы должны понимать, что наложение текстур может быть очень сложным процессом. Действия при наложении текстур Чтобы попользовать наложение текстур, вы должны предпринять следующие действия: 1.
Создать обьект текстуры и опрелелить текстуру для этого объекта. 2. Указать, как текстура будет применена к каждому пикселу. 3. Включить режим п сложения текстур. ь Отрисовать сцену с использованием как координат текстуры, так и геометрических координат.
Имейте в внлу, что наложение текстур работает только в режиме КСВА. Его резульпаты в режиме индексации цвета непредсказуемы. Создание объекта текстуры и определение текстуры Под текстурой обычно понимается нечто двумерное, как и большинство изображений, но она может быть также одномерной или трехмерной. Данные, описывающие текстуру, могут состоять из одного, двух, трех или четырех элементов на тексел и прелставляться четверкой (К, С, В, А), постоянной модуляции и компонентом глубины. В листинге 9.1, который очень прост, всего один объект текстуры создан для поддержания олной несжатой двухмерной текстуры.
Эта программа не пытается узнать, сколько доступно памяти. Поскольку создается единственная текстура, ие Общий обзор и пример 315 предпринимаются действия по определению приоритетов или иному управле- квю рабочим набором объектов текстур. Другие улучшения технологии, такие как обработка границ текстур, текстуры с различными уровнями детализации кли «кубические» текстуры, не использую~ся в этом простом примере. в Указание, как применить текстуру к каждому пикселу В вашем распоряжении одна из четырех доступных функций для вычисления конечного Р«СВЛ-значения, исходя из цвета фрагмента и данных изображения текстуры.
Одна возможность — это просто использование цвета текстуры в качестве Результирующего; это режим замещения, в котором текстура окрашивает собой фрагмент, как будто на него наклеивается переводная картинка. (Режим замешсвпя использован в листинге 9.1.) Другой способ — использовать текстуру лля модуляции (птгк)п!асс), или масштабирования, цвета фрагмента; эта техника полезна для комбинирования эффекта текстурирования с освещением. Наконец, постоянный цвет гиожет быть смешан с цветом фрагмента на основе значений текстуры.
зт Включение наложения текстур Вам нужно активировать текстурирование перед рисованием своей сцены. Тек- стуририрование включается н выключается командами В1ЕпаЫеО и В101зав)е1), с параметрами 6Е ТЕХТОйЕ 10, 6Е ТЕХТОКЕ 20, 6Е ТЕХТОйЕ 30 или 6Е ТЕХТОкЕ ЕВВЕ ИАР для одномерных, двухмерных, трехмерных или кубических текстур со- ответственно. к- л.к- ие 30спроизведение сцены с учетом координат текстуры и ееометрических координат Взм следует указать, как текстура должна быть выровнена относительно фрагментов, в которые она будет «вклеена». То есть вам нужно задать не только гсоистрические координаты объектов сцены, но и координаты текстуры.
Например, ззя двухмерных карт текстур диапазон координат простирается от 0.0 до 1.0 зобоих направлениях, но координаты элементов текстур могут различаться. Так, чтобы применить текстуру кирпича к стене, в допущении, что стена квадратная и, значит, люжст быть представлена одной копией текстуры, код, по вгсй видимости, присвоит координаты текстуры (О, 0), (1, 0), (1, 1) и (О, 1) четырем углам стены. Если стена протяженная, вы мозкете захотеть раскрасить ее несколькими зхзечплярамн текстур. Если сделать так, карта текстуры должна быть построезз с учетом того, чтобы кирпичи с левого края соответствовали кирпичам с правой стороны, и аналогично нужно поступить с верхними и нижними краями мялки.
зи- ре- ра:ына по- од- уз- не ПРИМЕЧАНИЕ Егли активны режимы в двух или во всех трех измерениях, то используется определенный для старшей размерности. Если используются кубические текстуры, они обладают наивысшим приоритетом. Это ваше дело, но ради чистоты программы лучше указывать только действительно задействуемый режим. 316 Глава 9 ч Наложение текстур Вы должны также указать, как следует обрабатывать координаты, выходящие за диапазон [0.0, 1.01. Повторить ли текстуру вдоль всего объекта или фиксировать ее в опрелеленных границах? Пример программы Одна из проблем с написанием простых программ, иллюстрирующих наложение текстур, — то, что представляющие интерес текстуры велики. Обычно текстуры читаются из файла, так как их программное описание может включить в себя тысячи строк кода. В листинге 9.[ текстура, состоящая из перемежающихся черных и белых квадратов, подобно шахматной доске, генерируется программой.
Программа применяет эту текстуру к двум квадратам, воспроизводимым с учетом перспе!стнвы. Один из них обращен «лицом» (находится под прямым углом) к наблюдателю, а другой наклонен назад на 45', как видно из рис, 9.2. В координатах объекта оба квадрата имеют одинаковый размер. Рис. 9.2. Текстурированные квадраты Листинг 9.1. Текстурированная шахматная доска: сйесКег.с Создание текстуры шахматной доски №Оет!пе спесх1аааеи1Н(П 64 №ае![пе спесК1вааеНе18пт 64 вта11с 6(иьуте спеск1ааае[спеск1вааене18пс][снеск1вааеи10(п][4]; в(ат(с 6(о>п( !ехиаве; чо>О ааКеСПесК1ааае(чо1О) ( !пс 1, ), с; 1ог (1 = е: ! < спеск1вааене!8пс; 1«+) ( т () = О; ) < спеси) таенгвсп; ) +> ( с = ((((!'аех8)==0)'((>аох8))==0))*255; сПесх1ааве [ 1) [> ] [8] = (6(ноуте) с, спеск1ваве [1] [) ) [ 1] = (6(оЬу!е) с; спеск1ваве[1)[)][2] = (6(иьуге) с, сьеск1ваае[з][)] [3] = (6(ноуте) 255; чо10 !сит(чо1П) Общий обзор и пример 317 В!С!еагсо!ог(8,8, О,О, 0.0, 0.0>; В!5пабенабе!(6С ЕСАТ); В!Епаб!е(6С ОЕРТН ТЕ5Т); аакеСПесх1юаВе(): В\Р!хе!5(оге!(6С ОМРАСК АС16ММЕМТ, 1); а!Оептехецгеэ(1, ЬСехнаюе); В!В!потех(цге(6! тЕХТОКЕ 20, Сехнаюе); В!Техрагаще(ЕГ((6( ТЕХТОКЕ 20.
6( ТЕХТОйЕ ИКАР 5. 6С КЕРЕАТ); В!ТехРагаюеСег!(6С ТЕХТОКЕ 20, 6( ТЕХТОКЕ ИКАР Т, 6С КЕРЕАТ); В!Техрагаюе(ег5(6С тЕХтОКЕ гО, 6С тЕХтОКЕ МА6 Р(СТЕК, 6С МЕАЙЕ5т>; В!ТехРагаще(ег!(6С ТЕХТОКЕ 20, ОС ТЕХТОКЕ М1М Р!СТЕК, 6С МЕАКЕ5Т); В!Тех!юакего(6( ТЕХТОЙЕ 20.