М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 74
Текст из файла (страница 74)
9.1. Третий аргумент передает значение указанного параметра. В коде ли тинга 9.6 базовый и максимальный уровни устанавливаются в значе. ния 2 и б соответственно. Так как изображение базового уровня (уровня 2) имеет Описание текстуры 341 рирешение 64 х 32 тексела, карты уровней 3, 4 и 5 должны иметь подходящие бо- зсе низкие разрешения. ие ."в. гя. м Таблица 9.1.
Параметры управления уровнями М1Р-отображения Значения Описание Параметр 6( ТЕХТОРЕ ВА5Е ЕЕЧЕЕ Уровень детализации текстуры с самым Любое неотрицательное высоким разрешением (с минимальным целое число номером) Я ТЕХТОРЕ МАХ ЕЕЧЕЕ Уровень детализации текстуры с самыи Любое неотрицательное низким разрешением (с наибольшим целое число номером) :и- ж- максимального уровней детализации М!Р- Листинг 9.6.
Задание базового и оюбражения 1!Техяагаветег((СС тЕХтОРЕ 20, 1!ТехРагаветег!(61 ТЕХТОРЕ 20, 1!Тех1вабе20(СС ТЕХТОРЕ 20, 2, 6( ОМ516МЕ0 ВУТЕ, !пабе!): 1!Тех1ваае20(6 ТЕХТОРЕ 20, 3, 6! ОМ516МЕО ВТТЕ. (ваае2); 1!Тех1вабе20(61 ТЕХТОйЕ 20, 4, 6!. ОМ516МЕО ВУТЕ, (вааез); 1!Тех!вабе20(6( ТЕХТОйЕ 20, 5, СС ОМ516МЕ0 ВТТЕ, (ваае4); 6( ТЕХТОРЕ ВА5Е (ЕЧЕС, 2); 6( ТЕХТОРЕ НАХ СЕЧЕ(, 5): СС йСВА, 64, 32, В, 61 й6ВА. ( тя 6( РСВА, 32, 16, В, Сс йСВА, 6( РСВА, 16. В, В, 6( Р6ВА, СС йСВА, В, 4, О, СС РСВА, ГО то ра Позднее вы можете решить добавить другие карты, как низкого, так и высокого разрешения. Например, вы можете добавить в этот набор текстуру 128 х 64 тексела с уровнем 1, при этом нужно будет переустановить значение параметра ВА5Е ЕЕЧЕЕ.
И. 30 а- а1У ПРИМЕЧАНИЕ Цтобы М1Р-отображение работало, все карты от ВА5Е ЕЕЧЕЕ до максимально возможного уровня включительно должны быть загружены. Максимально допустимый уровень — зто наименьшее, выбранное из значения МАХ ЕЕЧЕЕ или уровня, дпя которого размер карты составляет только 1 тексел (одно из 1, 1 х 1 или 1 х 1 х 1). Если загрузка карты для необходимого уровня будет неудачной, не удивляйтесь загадочному отключению текстурирования. Если М1Р-отображение и текстурирование вдруг не происходят, обеспечьте загрузку для каждого требуемого уровня детализации допустимой текстурой.
е;е, ге ( е- ху в, :т Подобно ВА5Е ЕЕЧЕЕ и МАХ ЕЕЧЕЕ, команда 61ТехРагаветег'() устанавливает параметры М1М Е00 и МАХ Е00. Таблица 9.2 содержит список допустимых их значений. Следующий код представляет пример использования 6!тех Р а г авете г ' ( ) для заЗания параметров уровней детализации; 1!ТехРагаветегт(6( ТЕХТОРЕ 20, 6( ТЕХТОйЕ М1М Соэ, 2.
5); 1!Техйагаветегт(6( ТЕХТОРЕ 20, 61 ТЕХТОйЕ НАХ Соэ, 4.5); Параметры И1М Е00 и МАХ Е00 определяют минимальное и максимальное значения для )( (коэффициент масштабирования от изображения текстуры к многоугольнику) для миниатюризации текстур, косвенно задавая, какие уровни М1Р- отображения используются. 342 Глава 9 ° Наложение текстур Таблица 9.2. Управление параметрами детализации М1Р-отображения Описание Значения Параметр ОЕ ТЕХТОкЕ М1й Е00 Минимальное значение Л(фактор маскпабирования Любое изображения текстуры относительно размеров многоугольника) Ы ТЕХТОКЕ МАХ (00 Максимальное значениеЛ Если вы имсстс многоугольник 64 х 64 пиксела и оставляете М1й ЕОО в значении по умолчанию — О,О, для миниатюризации можно использовать уровень О карты текстуры 64 х 64 тексела (ВА5Е ЕЕЧЕЕ - О; как правило, ВА5Е ЕЕЧЕЕ < М1й Е00).
Однако, если значение М1й (00 равно 2.0, размеры самой большой карты, допустимой при миниатюризации, составят 16 х 16 текселов, что соответствует Л = 2.0. Параметр МАХ Е00 вносит свой вклад, только если он меньше максимальной величины Л (которая равна значению МАХ (ЕЧЕ Е или тому, когда карта вырождается в тексел). В случае карты текстуры 64 х 64 тексела соотношение Л - 6.0 соответствует карте ! х 1.
Если жс значение МАХ (00 равно 4.0, для миниатюризации не будут использоваться карты меньше 4 х 4 тексела, Вы можете ориентироваться на то, что значение М1й ЕОО, незначительно большее ВА5Е ЕЕЧЕ Е, или значение МАХ (00, немногим меньшее МАХ ЕЕЧЕЕ, — лучшее решение для подавления паразитных эффектов визуализации (таких как «рывки»), связанных с переходами между М!Р-картами. Автоматическое генерирование М1Р-карт Допустим, что вы подготовили карту уровня О, то есть наивысшего разрешения.
Тогда подпрограммы я1цВи11с(10М!ршарз (), В1цвц(1о20М1рварз () илн к1цВц)14- ЗОВ ! ршарз () сами строят и определяют «пирамиду» М1Р-карт, спускающуюся к разрешению 1 х ! (или ! для одного измерения, или 1 х 1 х 1 для трехмерной текстуры). Если ваше исходное изображение имеет размеры, не равные в точноста степеням двойки, команда В1ивц)1О*ОМ! ржарз () масштабирует изображение к ближайшим степеням 2.
Также, если ваша текстура очень велика, В1цвц11о' ОМ)ршарз () уменьшает размер изображения до вписывания в нужные пределы (оцениваемые механизмом текстур-посредников, ОЕ РкОХУ ТЕХТОРЕ). шс В1цвц()а)0мзршарз(сеепшп сагяес, с1!пс тсегпа!Рогтас, се!и( тиссА С1.епшв ~Готтгзс, С1.епшп Суре, чо(с) *Селе!з); ш( В1цВц(1а20М)ршарв(С1епшп Сагяег, С! !пг тгегпа!Роста(, СЫп( т(с(С)с, Сдлп( Бесй)сс, СЕеппсп Согтас, С1.епшп суре, УоЫ 'сеян)з); !и( В1цвцз(ОЗОМ)ржарз(СЕепшп Сагяег, С1ш( тгегпа!гогтаС, С!!п( гск(с)с, СЕ!п( Ьесяссс, С1.ш( г7ерй, С1.ел от уогтаС, С1.епшп суре, чо!с1»сехе!з); Строит набор М!Р-карт и вызывает к1тех1шабе»0() для загрузки изображений. Значения аргументов Сагйег, тгегпа!гогтаС, та(С(з, йесй)сг, сСерССз, Сопла(, Суре и Сехе1з в точности тс же, что и для В1Тех1шабе10(), 61тех1шабе20() и В1тех1шаке30(). Если ззсе карты сформированы успешно, возвращается значение О; в противном случае возвращается код ошибки СЕБ.
Фильтрация 343 При повышенном контроле над уровнем детализации (используя ВА5Е СЕЧЕС, ХАХ СЕЧЕС, И1И С00 и ИАХ 100) может потребоваться создать только поднабор арт, определенный В1иВи ! 1с(*0М ! рва рз () . Например, вы можете захотеть остановиться на изображении с размерами 4 х 4 тексела, не доходя до наименьшей !екстуры 1 х 1, Чтобы вычислить уровни детализации и загрузить поднабор, вы кежете вызвать команду к1иВи!1а*0И(рварсече1з(). спс В1иВи ! 1410И ! рварсече1з(01епшп Гагяес, 01.шс (лгегла!гогтай 01.шС плс(й, 01.епигп !оплат, 01.епиш Суре, 01.шс !еие1, СЕ!пс Ьахе, СЕйп тах, чоЫ 'гехеЬ); шС В1иВи!1С)20И(рварсече1з(СЕепиш Гауес, 01!пс тгегаа!Гоппай С)йпс ила(га, С?.!пс )се!я)сг, С1 епит гоплад С1.епшп Суре, Санс !еие1, 01.!пС Ьазе, 01!пс тах, чо1с1 "сехеЬ); !ПС В\иви!1а30И!рварсече1з(01епиш !а!пег, СЕ!пс (псегла!гаплат, 01 !пС вИСА, СЕ!пс )се(яИ, 01!пс г!ерй, 01.епшп )оплат, 01.епшп гуре, Санс !еое1, СЕ!пс базе, СЫпс тах, чоЫ *гехе!з).
Формирует набор М1Р-карт и вызывает я1Тех1ваке*00 для загрузки изображений. Аргумент !еое1 указывает уровень детализации М1Р-отображения изображения Сехе!х Аргументы Ьазе и тах определяют деление изображения сехеЬ на уровни. Другие значения — гагдей штеп!а!Гоплай тЫЙ, )се!ййг, с(ерга, !оппас, Гуре и Гехе!х такие же, как для к1Тех1ваке100, к1Тех1ваке200 и х1Тех1ваке30 О. При удачном построении всех карт возвращается значение; иначе функция возвращает код ошибки СШ Если вы рассчитываете на изменения любых текселов изображения множественной текстуры, вам следует иметь полный набор связанных М1Р-карт. Если вы используете В1ТехРагавесег*О лля установки параметра ВС ВЕИЕКАТЕ М1РИАР ыначение 0 С Тки Е, изменения текселов (внутренней области или границ) будут происходить для всех текстур с уровнями ВА5Е СЕЧЕ С + 1 до ИАХ СЕЧЕ С.
Текстуры мя всех других уровней, включая ВА5Е СЕЧЕ С, будут оставаться неизменными. Фильтрация Текстура — это квадрат или прямоугольник, но после их наложения на много)тольник или поверхность и преобразования в координаты экрана отдельные веселы текстуры редко соответствуют пикселам конечного изображения. В заеисимости от примененных преобразований и самого наложения текстуры, один вксел на экране может соответствовать чему угодно, от крохотной горстки текилов (увеличение) до большого их набора (миниатюризация), как показано на )ис. 9.8.
В таких случаях сразу неочевидно, как изменятся, усреднятся и интерповруются значения текселов. В силу этой причины ОрепСЕ позволяет вам укаавать любые из некоторого количества настроек фильтрации для конкретизации ких вычислений. Эти настройки приводят к компромиссу между быстродействем и качеством изображения. Также вы можете задавать независимые методы ~ильтрации для увеличения изображений и их миниатюризации. 344 Глава 9 ° Наложение текстур В иных случаях неочевилно, что выбрать — увеличение или уменьшение, например, если карта текстуры нуждается в растяжении (или в сжатии) в обоих направлениях, х и ЕА Если карту нужно растянуть лишь в одном направлении и сжать в другом, ОреггОЕ делает выбор между уменьшением и увеличением так, чтобы результат был оптимальным в большинстве случаев.
По лучше избегать подобных деформаций за счет использования координат текстур. (См. раздел «Вьгчисление подходящих координат текстурыь.) Многоугольник ни Многоугольник Тексел (элемент текстуры) Пикселы Рис. 9.8. Увеличение и миниатюризация текстур В следующих строках кода приведены примеры использования команды 61техРа гамете г* О для задания методов фильтрации при увеличении и уменьшении карт текстур: 6)техРагаеесегг(6Г ТЕХТОКЕ 20, бг ТЕХТОКЕ НА6 Е!СТЕК, бс НЕАКЕ5Т); апехгагаиетег)<бг тбхтОКЕ 10, бг тЕХтОКЕ Н)Н Е)СТЕК, бг НЕАКЕЗТ); Первый аргумент 81техрагаметег* () — это 66 ТЕХТОКЕ 10, 66 ТЕХТОКЕ 20, 66 ТЕХТОКЕ 30 или 66 ТЕХТОКЕ СОВЕ НАР, согласно типу текстуры.