М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 75
Текст из файла (страница 75)
Второй аргумент — 6Е ТЕХТОКЕ МА6 Е1СТЕК или 66 ТЕХТОКЕ И1Н ЕТСТЕК, для указания того, где будет применяться метод фильтрации — при увеличении или уменьшении. Третий аргумент задает сам метод фильтрации; в табл. 9.3 содержится список лопустимых значений. Таблица 9.3, Методы фильтрации для увеличения и миниатюризации текстур Значения Параметр бг ТЕХТОКЕ МАб Е1СТЕК бг НЕАКЕ5Т или 66 С!НЕАК 6С ТЕХТОКЕ М1Н ЕТСТЕК 60 НЕАКЕ5Т,ЕС 61НЕАК,ЕС НЕАКЕ5Т М1РМАР НЕАКЕ5Т,ЕЕ НЕАКЕ5Т М1РМАР С1НЕАК, 66 ПНЕАК М1РМАР НЕАКЕ5Т или бг С1НЕАК М1РМАР !1НЕАК Если вы выберете 66 НЕАКЕ5Т, при фильтрации будет использоваться тексел с координатами, наиболее близкими к центру пиксела. Результатом могут быть неровности в анде ступенек (иногда проявляющиеся сильно).
Если вы выберете 66 61НЕАК, будет использоватъся средневзвешенное значение по массиву текселов 2 х 2, ближайпгих к центру пиксела, как лля увеличения, так и для уменьшения. (Для трехмерных текстур это массив 2 х 2 х 2; для одномерных — среднее пс двум текселам.) У краев карты текстуры в массив 2 х 2 может попасть нечто, что Фильтрация 345 п~аи хк, .ть ,ел мходится за ее пределами.
В таких случаях выбор значений текселов подчиняетогрежиму обработки границ (хугарр1пя) (см. раздел «Повторяемые и обрезанные мхстуры»). Приближение бс МЕАРЕ5Т требует меныпе вычислений, чем 6Е 11НЕАР, и, следовательно, может работать более быстро, но 66 Е1МЕАР пылает бонне плавно меняюгцисся результаты. При увеличении, даже при наличии М1Р-карух используется только карта базовоюуровня.
При миниатюризации вы можете уточнить метод фильтрации так, чтоЕн использовать наиболее подходяпууго карту или две карты, как описано в слеНующем абзаце. (Если для уменьшения указано значение 6С МЕАРЕ5Т или бь 11иЕАР, используется только карта базового уровня.) Кнк видно из табл. 9.3, четыре другие настройки фильтрации доступны только нрв миниатюризации. В пределах отлельной М!Р-картгя вы вправе выбрать установку в значение ближайшего тексела — 6Е ЙЕАРЕ5Т М1РМАР МЕАРЕ5Т или линейную интерполяцию — 6Е 61МЕАР М1РМАР МЕАРЕ5Т.
Первый метод быстрее, но результаты далеки от желаемых. Конкретная карта выбирается исходя из степени требуемой миниатюризации и точки переключения между картами. Во из(ежнние резких переходов используйте 66 меАРе5т м1РЙАР с!меАР или бс 11НЕАР М1РМАР Е1МЕАР с цельку линейной интерполяции значений двух ближайшнх текселов. В варианте бс ЙЕАРЕ5Т М1РМАР 11ЙЕАР выбирается тексел, ближайшнй в каждой из двух карт, и затем зти два значения линейно интерполируются. Вслучае 6Е 01ЙЕАР М1РМАР с1МЕАР линейная интерполяция сначала используйся для вычисления в каждой из двух карт, и затем она применяется к двум промежуточным значениям. Как и следовало ожидать, метол бс 61меАР м1РмАР 11НЕАР обычно производит результаты с лучшим качеством по разрешению, но пн требует больше вычислений и, соответственно, более медленный. шы нь- 61 згу- то- ЕМНМАНИЕ Если вы запросили фильтрацию для множественного отображения, но не подготовили полный к непротиворечивый набор карт (все изображения текстур с корректными размерами между уровнями бс ТЕХТОРЕ ВА5Е сЕЧЕс и бь ТЕХТОРЕ МАХ сбуЕс), Орепбс неявновыключиттексгурирование без генерации каких-либо ошибок, Если вы пытаетесь использовать множественное отображение, но текстурирования не происходит, убедитесь в наличии изображений текпур для всех уровней детализации.
гии. до- Некоторые из этих фильтров известны под более привычными названиями. Ме- юн 6Е МЕАРЕ5Т часто называют выборкой по точке (ро(пс нашр11пй), а бс (1НЕАР— билинейной выборкой (Ы11пеаг зашр11пй), поскольку в фильтрации для пнухмерных текстур участвует массив 2 х 2 тексела. Ннриант бс Е1ЙЕАР М1РМАР Ь1ЙЕАР иногда называют «трехлинейной» выборкой 10Н(пеаг зашр11пя), так как здесь имеет место линейное среднее по двум билиней- ам выборкам. Е5Т ксел Ныть ,рете .ксе- ьшене по ь что ЕРНМЕЧАНИЕ Точка переключения от уменьшения к увеличению обычно соответствует Х = 0.....0, но на нее влияет тип выбранного фильтра миниатюризации. Если увеличение выполняется согласно бс ЦМЕАР, а фильтруменьшения — бс МЕАРЕ5Т М1РМАР МЕАРЕ5Тибс ЙЕАРЕ5Т М1РМЯР 11МЕАР, тогда переключение между фильтрами выполняется для х = 0.5. Это предотвращает несоответавие внешнего вида маленьких текстур с их большими эквивалентами.
346 Глава 9 ° Наложение текстур Пособие по текстурам от Нзйта Робинса Если вы загрузили комплект обучающих программ Нэйта Робинса, запустите сейчас пособие по текстурам. (За справкой о том, где взять эти программы, обращайтесь к разделу «Обучающие программы по ОрепОь от Нэйта Робинса».) Она поможет вам в экспериментах с фильтрацией при наложении текстур, и вы увидите наглядно разницу между 6с МЕАКЕ5Т и 6Е Е1МЕАк. Объекты текстур Объект текстуры хранит ее данные и делает их легко доступными. Вы можете управлять множеством текстур и возвращаться к ранее загруженным текстурам. Использование объектов текстур — обычно самый быстрый способ применения текстур, дающий хорошие результаты по производителъности, поскольку практически всегда быстрее прикрепить (для многократного использования) к тек. стуре объект, чем непосредственно перезагружать изображение текстуры с помощью 61тех1еабе*во.
Также некоторые реалиаации поддерживают ограниченный по количеству рабочий набор (чогЫпй зег) высокоэффективных текстур. Вы можете использовать объекты текстур для загрузки наиболее часто востребуемых вами текстур в эту область данных. Чтобы исполъзовать объекты текстур для своих данных текстур, выполните следующие действия.
1. Сгецерируйте имена текстур. 2. Свяжите (создайте их) объекты текстур с данными текстур, включая массивы изображений и свойства текстур. 3. Если ваша реализация поддерживает рабочий набор высокопроизводительных текстур, поглядите, достаточно ли в нем места для ваших объектов. Если свободного пространства мало, вы можете назначить приоритеты объектам текстур так, чтобы наиболее часто востребуемые постоянно присутствовали в ра. бочем наборе. 4. Открепляйте и повторно прикрепляйте объекты текстур, делая их данные дос. тупными в нужньш момент для отображения текстурируемых моделей. Присвоение имен объектам текстур В качестве «имени» текстуры может быть использовано любое целое беззнаковге число.
Чтобы избежать дубликатов имен, обеспечьте их согласование между собой с помощью команды а16ептехтогез(). ноЫ я16ептехгигеэ(01.з1ге1 п, 01л1пГ "ГехтигеХитез)' Возвращает и неиспользуемых на данный момент имен для объектов текстур в массиве геятигеИатех Значения в этом массиве могут не быть набором последовательных целых. Объекты текстур 347 Имена в массиве тех(иге№тез помеча1отся как используемые, причем они наследуют состояние текстуры и ее размерность (11), 21) или 31)) только прп первом использовании. Нуль — зарезервированное имя, которое никогда не возвращается функцией В16ептехтпгев О.
Команда В11зтехгогео выясняет, используется ли имя текстуры. Если возврав(енное командой В16епТехгогево имя еще не было закреплено за объектом (вмзовом В1В)потех(иге()) с именем хотя бы раз, то В11втехгцге() возвращает 6( ГА(5Е. СЕЬоо)сап В11вТехтоге(СЕп(п( Гехтигейгате) Возвращает 6С ТВОЕ, если Гех(игедгате оказывается именем текстуры, которое было назначено текстуре и впоследствии не высвобождено, и возвращает 6( РА(5Е, когда Гехсиге)Оате равно нулю или это имя ненулевое и отсутствует среди выделенных текстурам имен. Создание и использование объектов текстур Создает и использует объекты текстур одна и та же команда В1В! потех(о ге ( ) .
Если ИРЯ тЕКСтуРы уже было прикреплено (посредством В101ППТехти ге () ), объект ноюй текстуры создается со значешими по умолчанию для параметров изображения текстуры и ее свойств. Последующие вызовы В1Тех1найе'(), В1Тех5иЫваВе'(), 11Сорутех1вайе*(), В1Сорутех5оЫнайе*(), 01ТехРагааетег*() и В1Ргчог111веТехгигев() сохраняют свои данные в объекте текстуры. Объект текстуры может содержать изображение текстуры и связанные и множественные изображения (если надо), включая информацию о ширине, высоте, толщине границ, внутреннем формате, размерности компонентов и свойствах текстуры.
В сохраненных свойствах в том числе указываются фильтры увеличения и уменьшения, режимы обработки границ (нгарр(пя), цвет границ и приоритет текстуры. Когда в дальнейшем объект текстуры связывается повторно, его данные становятся текущим состоянием структуры. (Замещают собой текущее состояние.) чо1г( В101пптехгоге(С1спшп Гагйег, СЕшпг гех1игеХате) Делает три вещи. Когда для гехгигеЖате используется ненулевое беззнаковое целое число, причем в первый раз, создается новый объект текстуры и ему присваивается это имя.
Если обнаруживается факт предыдущего связывания имени и объекта текстуры, этот объект становится активным. Когда указывается нулевое значение аргумента гехгиге№те, ОрепС1. останавливает использование объектов текстур и возвращает неименованную текстуру по умолчанию. Если объект текстуры связывается в первый раз (то есть создается), ему назначается размерность целевой текстуры гагкег, выбираемая из 6( техтцяе 10, 6С ТЕХТОВЕ 20, 6( ТЕХТОкЕ 30 или 6( ТЕХТОВЕ СОВЕ НАР. Сразу после первичного связывания состояние обьекта текстуры идентично состоянию текстуры по умолчанию размерности гагдег.
В этом начальном состоянии свойства текстур, такие как фильтры увеличения и уменьшения, режимы обертки, цвет границы и приоритет текстуры, приобретают значения цо умолчанию. 348 Глава 9 ° Наложение текаур В программе из листинга 9.7 в теле процедуры ! и ! 1() создаются два объекта текстур. В процедуре б! 501ау() каждый из них привлекается к воспроизведению различных четырехсторонних многоугольников. Листинг 9.7. Прикрепление объектов текстур: (ехЬ)пб.с №беГ!пе спесх1вахеи!б(П 64 №бег!пе спесх1вахеНе!Впс 64 51ас! с 6(оьусе спеск1ваке[спеск1ваВене! Впс] [спеск1вахеичбгп] [4]; атас! с 6(оьу(е о(пег!вахе [спеск1вахене! Впс] [спеск1вавеи!бсп] [4]; атас!с 61о!пс сехкаве[2]; чо!б вахеспесх1вахеа(чо(б) !пс 1, ], с; гог (! = 0; ! < спеск!аахене!Впс; !++) !ог () = О; ) < спесх!вахеизб(П; ]++) с = (((!Ввхв)==9)"((]89хв)==0))"255; спесК1вахе[!][)][9] = (6!.ОЬусе) с; спеск1ваве[!][)][1] = (6(оьусе) с; спесх1вахе[!][]][2] = (6(ооуге) с; спесх1ваве[!][]][3] = (6(ооусе) 255: с = (((!$8х19)==9)"(()йвх19)==8))'255; о(Пег1ваве[з][]][9] = (61ооу1е) с: о(пег1вахе[!][]1[ 1] = (6(ооусе) О; о1Пег1ваве[!][)][2] = (6!.иЬусе) 9; оспег1ваве [ ! 1 [ 1] [3] = (6СОЬуге) 255; ) ) чо!б !и! 1(чо!б) ( 81С]еагсо]ог(9.9.
В.О, О.В, О.О); 815пабеиобе1(6( РСАТ): 81ЕпаЬ]е(61 ОЕРТН ТЕ5Т); вахеспесК1вахеа(): 81Р!хе15(оге!(61 ОМРАСК А116МНЕМТ, 1); 816ептехсогеа(2, (ехиаве); 818чпбТех(иге(61 ТЕХТОКЕ 20, сехМаве[9]); 81техРагаве1ег!(6( ТЕХТОКЕ 20, 61 ТЕХТОКЕ ИКАР 5, 6( ССАНР); 81ТехРагавесег!(6С ТЕХТОКЕ 20, 6С ТЕХТОКЕ ИКАР Т, 61 ССАНР); 81техРагавесег!(61 ТЕХТОКЕ 20, 6С ТЕХТОКЕ НА6 Р]СТЕК, 6С МЕАКЕ5Т); В!ТехРагавесег!(6( ТЕХТОКЕ 20, 6( ТЕХТОКЕ Н1М Р1(ТЕК, 6( МЕАКЕ5Т): 81тех1вахе20(61 ТЕХТОКЕ 20, 9, 6( К6ВА, спесх1вахеи!ОСП, спесх1ваВеке!ВП(, 8, 61 МОВА, 6( ОМ516МЕО ВЧТЕ.