OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 73
Текст из файла (страница 73)
О, 6С МОВА, 6С ОМ516МЕ0 ВУТЕ, а<рвар1вайе2); 81тех1вай«20(6С ТЕХТОКЕ 20, 5, 6С МОВА, 1, 1. О, 6С К6ВА, 6С ОМ516МЕ0 ВУТЕ, а>раар1аахе1); 81техЕпчг(6С ТЕХТОКЕ ЕИЧ, 6С ТЕХТОЙЕ ЕМЧ МООЕ. 6С КЕРСАСЕ): 81Епаые(6С ТЕХТОЙЕ 20); чо!О О!401ау<чо<О) < 81С1еаг(6< СОСОК ВОРРЕЙ 81Т ! 6< ОЕРТН ВОРРЕй 8!Т); 818<пОТехСоге(6< ТЕХТОКЕ 20, Сехнаве); 8>зеа!п<6< ООА05>; 8>техеоогО2((В.В, 8.0); 8>чег<ехЗУ(-2.8, -1.8, О.в>; 8<техеоог42<<8.8, В.О>; 8>чегСехЗ<<-г.О. 1.О, О.О>; 81ТехСоогс2<(8.0, 8.0): 81чег<ехз<(2000.0, 1.0, -6808.0); 81Техсоогсзг(8.8, 0.0); 81чег<ехзг(2000.0, -1.0, -6008.0); 8\Ело(): 81Р1о»ПО; Каждому уровню дстализацци в листинге 9.5 назначен свой цвет с целью показать, как один замешает другой. В реальной ситуации вы определястс множественныс отображения так, чтобы сделать переходы незаметными, насколько это возможно. Поэтому уровни низкого разрешения обычно являются фильтрованными версиями уровней высокого разрешения.
Формирование серии таких карт обычно делается в процессе программирования, а не является частью ОрепО1., которая просто не что иное, как библиотека для визуализации. Поскольку конструирование уровней дстализации является важной работой, библиотека инструмснтов Орепб1, <ОШ) содержит подпрограммы, которые помогают манипулировать изображениями, используемыми в качестве М1р-текстур, как описано в разделе «Автоматическое генерирование М1Р-карта Вычисление уровня детализации множественного отображения Вычисление уровня детализации М1Р-отображения для текстуры, накладываемой па определенный многоугольник, зависит от фактора масштабирования Описание текауры 339 пеклу изображением текстуры и размерами текстурируемого многоугольника (в пнкселах).
Обозначим этот фактор масштабирования как )., а также определим поРое значение, Р, где Х = 1ой, Р +!од„и, Так как изобРажениЯ текстУР могУт быть нногомсрным, важно пояснить, что р — максимальный фактор масштабированнн по всем измерениям. Поправка 1одь;,. — это уровень детализации отклонения (Ъ|ав), константа, устакввлнваемая командой к1техЕпч«О для подстройки ).. (За справкой об испольюввнни н1тех 6 пч* () для установки уровня детализации отклонения обращайпсь к разделу «Функции текстур>.) По умолчанию !оды„- 0.0, поэтому не вносит вклад в масштабирование.
Лучше начать с этого значения по умолчанию и прн необходимости вносить небольшие коррективы. Гснн ), < 0,0, текстура меньше многоугольника, то есть используется фильтр увеннчения. Если Х > 0.0, используется фильтр миниатюризации. В случае уменьшающего фильтра ) указывает уровень М!Р-отображения. (Точка переключения ву одного фильтра к другому обычно ). = 0.0, но не всегда. Определенный фильтр )1!Р-отображения может сдвинуть эту точку.) Например, если размеры изображения текстуры 64 х 64 тексела, а размеры мноюугольника — 32 х 32 пиксела, тогда р = 2.0 (не 4.0) и, следовательно, ), = 1.0.
Еснн размеры изображения текстуры равны 64 х 32 тексела и размеры многоугольника 8 х 16 пикселов, тогда р = 8.0 (х увеличивается с коэффициентом 8.0, в фактор масштабирования для у — 2.0) и, соответственно, ) = 3.0. жа- :ст- это пвя, для аж- мы, тве ик текстура пы- ния Рис. 9.т. Использование мозаичных текстур управление уровнем детализации М1Р-отображения По умолчанию вы должны подготовить карты для каждого разрешения, уменьшвн их до одного тексела в каждом направлении. В некоторых случаях таких нрезвычайно маленьких изображений, представляющих ваши данные, можно из(сжать.
Например, можно обратиться к технике, называемой складыванием момнва (шова!с!пй), где несколько маленьких изображений комбинируются в одну пкстуру. Один из примеров мозаики показан на рис. 9.7, здесь множество симвоюв представлено одной текстурой, которая бывает более эффективной, чем созпние отдельных текстур для каждого символа. Чтобы наложить на изображение гонько один символ из текстуры, вам нужно целенаправленно использовать коврнннаты текстуры для отделения интересуюшей вас буквы. 340 Глава 9 ° Наложение текстур Если вы примените совсем миниатюрные М1Р-карты, для таких карт сложение мозаики будет неприемлемым вследствие вырождения деталей начертания бука, Соответственно, может потребоваться наложить ограничения на разрешения.
В общем случае нужный результат достигается добавлением или удалением уровней детализации М1р-карт. Другая проблема визуализации М1Р-карт — «скачки» (рорр)пй) — внезапные переходы от одной карты к другой, совершенно отличающейся по разрешению, имеющие место, когда текстурируемый многоугольник становится больше иля меныпе. ПРИМЕЧАНИЕ В поздних версиях Орепбь возможности М1Р-отображения значительно расширились отиося.
тельно ранних. Проверьте версию своей реализации на предмет поддерживаемых ею возможностей. В некоторых версиях какие-то мз нмх могут быть доступны как расширение. Уровни детализации М1Р-отображения управляются константами 61 ТЕХТОКЕ ВА5Е СЕНЕС, 61 ТЕХТОКЕ ИАХ СЕЧЕС, 6С ТЕХТОКЕ И1И 100 и 61 ТЕХТОКЕ ИАХ 100, передаваемыми функции я1техРагажетег«(). Первые две константы (для краткости до копна раздела будем употреблять урезанные наименования — ВА5 Е СЕНЕС и ИАХ СЕЧЕС) отвечают за то, как используются уровни легализации, то есть какие уровни следует задать. Другие две константы (сокращенные нами да И1И С00 и ИАХ 100) определяют активный диапазон вышеупомянутого фактора масштабирования л.
Эти параметры текстуры связаны с несколькими ранее описанными проблемами. Эффективно использовать ВА5Е СЕЧЕС н ИАХ СЕЧЕС можно, сократив количество задаваемых карт, тем самым демонстрируя рациональный подход к расходованию ресурсов. Избирательное использование ИАХ 100 может сохранить предста. вительность мозаичных текстур, а И1И С00 смягчит аффект «прыжков» между версиями с резко различающимися разрешениями. Параметры ВА5Е СЕЧЕС и ИАХ СЕЧЕС задают граничные значения уровней М!Р. отображения.
Параметр ВА5Е СЕНЕС вЂ” это уровень для самого высокого разреше. ния (наибольшей текстуры), по умолчанию его значение равно О. Тем не менее, вы можете изменять базовый уровень ВА5Е СЕЧЕС, добавляя дополнительные текстуры с высоким разрешением «на лету».
Аналогично, ИАХ СЕНЕС накладыва. ет ограничение на самое низкое разрешение. Значение по умолчанию для ИАХ СЕЧЕ С равно 1000, а зто практически всегда означает, что минимальная по разме. рам текстура будет представлена одним текселом, Чтобы задать базовый и максимальный уровни, используйте процедуру к1техРагажетег»() с первым аргументом, установленным в 61 ТЕХТОКЕ 10,61 ТЕХТОКЕ 20, 6С ТЕХТОКЕ 30 или 6С ТЕХТОКЕ СОВЕ ИАР, в зависимости от самой текстуры. Второй аргумент, принимаемый процедурой, это один из параметров, описанных в табл.
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.