OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 68
Текст из файла (страница 68)
8, 6( К6ВА, спесх>юайеи!бСП. спесх1юайене(ВПС, О, 6С КОВА, 6( ОМ516МЕО ВЧТЕ, сПеск1юайе); > ге!б б1501ду(чо!б) ( Е>С!еаг(6С СОСОК ВОРРЕй В1Т ! 6С ОЕРТН ВОРРЕй 81Т); В!Епао!е(6С ТЕХТОЙЕ 20>; Е!Техбпч((6( ТЕХТОКЕ ЕМЧ, 6С ТЕХТОКЕ ЕМЧ МООЕ, 6( КЕР(АСЕ); В!В(пбтехгцге(6С ТЕХТОКЕ 20. Сехнаюе); К!Век!п(6С ООА05); Е!Техсоогб21(8.9, 0.8); 81Нег(ех31(-2.8, -1.0, 0.0); Е!Техсоогб21(8.8, 1.0); В!Негтех31(-2.8, 1.О, 0.0); В!Техсоогб21(1.0, 1.8); 81Чегсех31(8.0, 1.0, 9.0); В!Техсоогб21(1.8, 0.0); В!Негтех31(8.9, -1.8, 0.0); В!Техсоогб21(8.8, 0.0); 81Чегтех31(1.0, -1.0, 0.8); Е!Техсоогбг((8.8, 1.0>; В!Негтех31(1.8, 1.0, 8.0); В!Техсоогбг((1.8, 1,8): 81Чег(ех31(2.41421, 1.0, -1.41421); Е!Техсоогб21(1.8, 0.0>; В!Чег(ех31(2.41421, -1.0, -1.41421>; 11Епб (): В!Р!оэп(): 1!0(эап!е(6С ТЕХТОКЕ 20); ) го(б геэпаре(5пС и, 5пС П) ( 1!Ч(енрогС(8, О, (6(5!се!) н, (6(5!хе!) П); 1!Ма(г(хнобе(ОС РЙОЗЕСТ!ОМ); 1!Сааб(беп(((у(>; В!ЧРегэресС!че(ВО.В, (6С1!оаС> ну(6(1!оаС> П, ).О, ЗО.О>; К!Магг!хнобе(6( МООЕСН1ЕИ); Е!Соаб1бепС!Су(); 1!Тгапэ!аСе1(8.8, 8.8, -З.б); ) Р Кеуооагб() и юа!п О удалены с целью сокращения объема 'Г Текстура в клетку генерируется процедурой щаКеС Пес К1щайе (), а вся инициалиикня процесса наложения текстур происходит в теле ! и ! с () .
Команда 1!Еептехсцгеэ () присваивает имя объекту текстуры, а к)В! пбтехсцге() созданэтот объект для изображения текстуры. (См. раздел «Объекты текстура,) Карп текстуры с полным разрешением задается командой 91тех1щайего(), прини- 318 Глава 9 ° Наложение текстур макяцей в аргументах размер, тип, положение н другие свойства изображения текстуры. (Подробнее о функции В1Тех? Иабе20 О см, раздел «Описание текстуры».) Четыре вызова В1Техрагамесег*() определяют, как текстура будет обработана на границах (лугаррес)) и то, как должны фильтроваться цвета в случае неточного совпадения текселов и пикселов экрана. (См. разделы «Фильтрация» и «Повторяемые и обрезанные текстурым) В процедуре Оз ар1ау() команда В1Епаб?еО включает текстурирование, Команда В1ТехЕпт» () устанавливает режим рисования 6С ИЕРСАСЕ, где текстурируемые многоугольники рисуются с использованием цветов карты текстуры (оригинальный цвет многоугольников во внимание не принимается).
Затем рисуются оба многоугольника. Заметьте, что координаты текстуры задаются вместе с координатами вершин. Команда В1ТехСоога* () ведет себя подобно команде В1Иогва1(), она устанавливает текущие координаты текстуры; любая последующая команда для вершин ассоциирует свои данные с координатами текстуры до тех пор, пока нс будет снова вызвана В1ТехСоога» () . ПРИМЕЧАНИЕ Изображение шахматной доски на наклонном многоугольнике может выглядеть неверно, когдз вы компилируете и исполняете код на своем компьютере, — например, оно может напоминать два треугольника с различными проекциями шахматной доски. Если это так, попробуйте устано. вить параметр 6С РЕЙВРЕСТ1ЧЕ СОЙЙЕСТ!ОИ Н1ИТв6С И!СЕ5Т(команда 01Н!пг()) и запустите пример на исполнение еше раз.
Описание текстуры Команда В1Тех?вабе20О определяет двухмерную текстуру. Она принимает несколько аргументов, кратко описанных ниже и более подробно в следующем разделе. Связанные команды для одномерных и трехмерных текстур— с1Тех?майе?0() и В1Тех?шабе30(), — описаны в разделах «Одномерные тексту. ры» ~! «Трехмерные текстуры» соответственно. нок? В1Тех?аабе20(С?.епшп гагяет, С1(п( ?еле?, С1(пС (лгегла?гогглаг, СЫге( ггбг!()г, СЫге? ?генг, С?йпс бом?еи С?.епшп )огглад С?.епшп гуре, сопят С?.уо(г) "Гете?х); Определяет двухмерную текстуру, Аргумент гагяег задается одной из следующих констант: 6С ТЕХТОПЕ 20, 6С РИОХУ ТЕХТОИЕ 20, 6С ТЕХТОкЕ СОВЕ ИАР Р051Т1ЧЕ Х, 61 ТЕХТОИЕ СОВЕ ИАР ИЕ6АТ1ЧЕ Х, 6С ТЕХТОИЕ СОВЕ ИАР Р051Т1ЧЕ У, 61 ТЕХТОВЕ СОВЕ ИАР ИЕ6АТ1ЧЕ У, 6С ТЕХТОкЕ СОВЕ ИАР Р051Т1НЕ 2, 6С ТЕХТОВЕ СОВЕ ИАР ИЕ6АТ1НЕ 2 цли 6С РИОХУ ТЕХТОИЕ СОВЕ ИАР.
(См. раздел «„ Кубические" текстуры» для получения информации об использовании констант 6С 'СОВЕ НАР* совместно с В1Тех?аабе20 и связанными функциями.) Аргумент ?епе! используется, если вы хотите иметь карты текстур с различными разрешениями; для единственного разрешения значение уровня детализации (?еге!) должно быть равно О. (См. раздел «М?Р-отображение: детализация на множестве уровней».) Описание текстуры 33.9 ботана очного Повто- ерно, хог напои ива «йтеуст ан нзапуст и ния Следующий аргумент, внутренний формат (тгегли!госта«), указывает, какие компоненты (ПОВЛ, глубина, яркость или интенсивность) выбраны для текселов изображения.
Значение внутреннего формата предстанляется номером от 1 до 4 или одной из следукнцих символических констант: 61 ЛЕРМА, 61 ЯЕРНЛ4, 61 ЛЕРНАВ, 61 АЕРНА12, 61 АЕРНА16, 61 СОНРКЕ55ЕО АЕРНЯ, 61 СОМРКЕ55ЕО 10Н1МАИСЕ, 61 СОМРКЕ55ЕО ЕОМ1МАМСЕ АЕРНА, 61 СОМРКЕ55ЕО 1НТЕМ51ТУ, 61 СОМРКЕ55ЕО К68, 61 СОМРКЕ55ЕО НОВА, 61 ОЕРТН СОМРОМЕМТ, 61 ОЕРТН СОМРОИЕИТ16, 6Е ОЕРТН СОМРОМЕИТ24, 61 ОЕРТН СОМРОМЕИТ32, 6!. Коман- 10Н1ИАМСЕ, 61 «ОМ1МАИСЕ4, 61 ЕОМ1МАМСЕВ, 61 ЕОМ1МАМСЕ12, 61 СОМ1ИАМСЕ16, урируе- 61 ЕОН1МЛИСЕ ЛЕРМА, 6Е ЕОМ1ИЛИСЕ4 АЕРНА4, 61 ЕОМ1ИЛИСЕ6 ЛЕРНЛ2, 61 (ориги- 10Н1МАМСЕВ АЕРНАВ, 6Е ЕОМ1ИАМСЕ12 АЕРНА4, 66 ЕОМ1ИАИСЕ12 АЕРНА12, 61 10Н1МАИСЕ16 АЕРНА16, 66 1МТЕМ51ТУ, 61 1МТЕМ51ТУ4, 6Е 1МТЕИ51ТУ8, 61 1МТЕМ51ТУ12, 61 1МТЕИ51ТУ16, 61 К68, 61 КЗ 63 82, 6Е К684, 6Е К685, 61 К688, 61 К6810, 61 К6812, 6Е К6816, 61 НОВА, 61 КОВЛ2, 61 КОВА4, 6С К685 А1, 6!.
КОВА8, 61 К6810 А2, 61 КОВА12 или 61 К6ВА16. (См. рж«дел «Срункции ;ами тек текстур» для справки о том, как применяются выбранные компоненты, и см. Раздел «Сжатые изображения текстур» по теме обработки сжатых текстур.) Внутренний формат может предъявить специфические требования к размерности компонентов. Напр««мер, если «итетпиЫоппа«установлен в значение 6С КЗ 63 82, вы запрашиваете для текселов цо 3 бита для красного компонента, 3 б««- та — для зеленого и 2 бита для синего.
ОрепОС не гарантирует, что удовлетворит требования, а только обязуется подобрать внутреш«ее представление, примерно соответствующее запросу. По определению в этом отношении терпимы параметры 61 10М1ИАМСЕ, 61 ЕОМ1ИАМСЕ АСРНА, 61 ОЕРТН СОМРОМЕМТ, 61 К68 и 61 НОВА, поскольку они не интересуются конкретным разрешениел«. (В целях совместимости с редакцией ОрепС). 1,О для внутреннего формата поддержаны численные значения 1, 2, 3 и 4, которые эквивалентны символическим именам нимает и 61 ЕОМ1МАИСЕ, 61 ЕОН1МАМСЕ ЛЕРМА, 61 К68 и 66 К68А соответственно.) в следу Ширина (тпЫ«Ь) и высота (ЬлВЬ«) задают размерность изображения текстуры; текстур ар«умент Ьогдег указывает толщину границы, равную либо 0 (нет границы), «ые текст либо 1.
Ширина и высота должны удовлетворять выражению 2ги + 2Ь, где и— неотрицательное целое число (оно может быть различным для аргументов паг, «й а«уаЬ и Ье!МЬГ), а Ь вЂ” значение аргумента Ьо«ттег. Максимальный размер тскстузпзс ры зависит от реализации ОрепС(., но он никогда не меньше 64 х 64 (или 66 х 66 с границами). Лргумснты формат (/огп«аг) и тип («уре) описывают формат и тип данных СОВ изображения текстуры. Они имеют те жс значения, что и для команды ТОКЕ СОВ х«вгаиР«хе«з(). (См. Раздел Ко ейерная обрабо«ка изображений» лавы 8) Факт««чески данные текстуры имеют тот же формат, что и данные для 810гаиР!хе1зО, и к ним применимы установки для 81Р«хе151оге*О и 81Р«хе1- об Тгапзтег»О.
(В программе из листинга 9.1 вызов 81Р«хе15«оге«(61 ~ и связан«40ИРАСК АЕ 16ИМЕМТ, 1 ) делается потому, что данные в примере не выровнены «относительно конца рядов текселов.) Значения аргумента /оггпиг могут быть лич«4слеДУющими; 6Е СОСОК 1МОЕХ, 61 ОЕРТН СОМРОМЕИТ, 6С К68, 61 К6ВА, 61 детаз««н)КЕ06ЕОКЕЕМ6«8«ОЕ6«А«РНА6««ОМ1 МАИСЕ ИЛ««6««ЦН1 МАИСЕ А«РНА а«)то есть те же, котоРые допУстимы длЯ 810гаиР! хе1з О, за искл«очением 6Е ~5ТЕИС11 1ИОЕХ.
320 Глава 9 ° Наложение текстур Аналогично, аргумент Гуре задается константами 6Е ВУТЕ, 6Е ОМ516ИЕО ВУТЕ, 6Е 5НОНТ, 6Е ОИ516МЕО 5НОИТ, 6Е 1МТ, 6Е ОМ516ИЕО 1МТ, 6Е РЕОАТ, 6Е 81ТНАР илн одним из типов упакованных пикселов. Наконец, собственно текселы (гехеЬ) содержат данньве изображения текстуры. Эти данные описывают изображение текстуры, равно как н его границы. Внутренний формат изображения текстуры может сказаться не в пользу производительности текстурирования. Например, отдельные реализации выполняют текстурирование в режиме 6Е И6ВА быстрее, чем в режиме 6Е Й68, так как компоненты оптимально выровнены в оперативной памяти.
Поскольку это поведение может измениться, вам следует проверить информацию, имеющую отношение к специфике реализации ОрепС1.. Внутренний формат изображения текстуры также может влиять на то, сколько памяти выделяется под это изображение. Так, текстура с форматом 6Е ИОВАВ использует 32 бита/тексел, в то время как текстура в формате 6Е ИЗ 63 82 требует только 8 бит/тексел. Разумеется, это отражает соотношение между требованиями к памяти и глубиной цветности. Текстура 6Е ОЕРТН СОИРОИЕМТ чаше сохраняется с информацией глубины, для ее последуюшего полезного использования. В разделе «Глубина текстур» вы можете прочитать, как глубина текстур может быть испольаована при воспроизведении теней. Хотя результаты наложения текстур в режиме индексированных цветов не определены, вам все еше позволено указывать параметр 6Е СОЕОН 1МОЕХ.
В эхом случае для преобразования индексов в значения КСВА применяются операции при передаче пикселов, согласно таблице подстановки. Если ваша реализация ОрепС1 полдерживает расширение 1шая1пя БпЬвег и включены какие-либо его возможности, изображение текстуры включается в область нх применения. Так, если фильтр двухмерной сверки включен, свертка будет выполнена и для изображения текстуры. (Свертка может изменить высоту и ширину изображения.) Количество текселов, указанное для ширины и высоты изображения текстуры, ие включая необязательную границу, должно быть степенью 2.
Если ваше оригинальное изображение по размерам не соответствует этому ограничению, вы можете использовать подпрограмму СЕП 81и5са1е1еайеО для переопределении размеров своих текстур. 1пв 81о5са1е1паие(С1.епшп ~огтат, С(зпс юЫГйгп, Салос Ье(оп, С1.епшв Турени сопит чоЫ «г)а1ай, С11ПГ иЫйоий С1(пс Ьегййвоий С1.еппш Гуреоиг, ток) «гlагаоаг); Масштабирует изображение с использованием соответствующих режимов хранения пикселов.
Распаковываемые данные извлекаются из массива в(ага)в. Аргументы ~оппаг гурет и гуреоиг могут ссылаться на любой нз форматов и типов данных, поддерживаемых 810гвнР1хе1в(). Изображение масштабнру. ется с помощью линейной интерполяции и фильтрации (от размеров гвЫгл(п и Ьегф1(п к размерам мЫйоив и Ье(ййгоиг), рсзультнруюшне данные записыва- Описание текстуры 321 ются в массив На(апай с использованием режимов хранения пикселов 6С РАСК«.