М. Ву, Т. Девис, Дж. Нейдер, Д. Шрайнер - OpenGL. Руководство по программированию (Библиотека программиста) (2006) (1124363), страница 66
Текст из файла (страница 66)
Листинг 8.9. Нахождение минимального и максимального значений пикселов: ш]оспах.с ехсегп 6(оьусе' геаб1вайе(сопаг спаг', 6(а1ге(", 6(атае1'); 6[оьусе *р1хе1а; 61кгае1 и1б(П, Пе]ВП(: чо[б 1п11(чо1б) ( р1хе15 = геаб1вайе("вага!1ееба лип", аи[бгп, апе]ВПС): 61Р1хе15(оге! (6( ОМРАСК А[16МИЕМТ, 1); В[С1еагСо1ог(В.О. В.О, 0.0, 0.0); 51И!Пвах(6[ И1МИАХ, 6( ЯЕВ, 6( РА[5Е); 61Епаще(6( И1МИАХ); чо]б баар1ау(чо]б) ( 61ооуге ча1оеа[б]; а161еаг(6( СОСОЯ ВОРРЕЯ В1Т); В]йазгегроа21(1, 1); 610гаиР1хе1а(и1б(П, Пе]ВП(, 6( ЯВВ, ВС ОМ516МЕ0 ВТТЕ, р1'хе1а); В16еСИ[пвах(6( И!МИАХ, 6( ТЯОЕ, 6( ЯОВ, 6( ОМ516МЕ0 ВЧТЕ, ча1оеа); В[Р1оап(); рг]пс((" Красный: мин = Ъб макс = аб)п", ча1оеа[0], ча1оеа[З)); рг!п(1("Зеленый: мин = хб макс = ЖО1п", ча1оеа[ 1], ча1оеа[4]); рг]пг((" Синий: мин = Мб макс = Хб(п", ча1оеа[2], ча1оеа[5]): ] Команда к16е[И1пвах () после извлечения результатов может сбрасывать буфер значений, чо вы можете сделать это и явно вызовом Я1Яезетм]пвах ().
чо[с[ В1хезети]пвах(с1епнш (огне(); Сбрась,вает минимальное и максимальное значения к их значениям инициализации. Аргумент гагяег задается равным 61 И1МИАХ. Наложение текстур После прочтения этой главы вы научитесы Понимать, что наложение текстур в состоянии привнести в вашу сцену Задавать изображения текстур со сжатием и без сжатия Управлять фильтрацией изображения текстуры при его применении к фрагменту Создавать изображения текстур в объектах текстур и управлять ими, а также, если это возможно, управлять высокопроизводительным набором этих объектов текстур Устанавливать, как значения цвета в изображении будут комбинироваться с фрагментами, к которым изображение применяется Дополнять изображение координатами текстуры, показывающими, как изображение текстуры должно быть выровнено относительно объектов сцены Автоматически генерировать координаты текстуры для получения таких эффектов, как контуры предметов и структура природных объектов Выполнять сложные операции над текстурами за один проход посредством мультитекстурирования (последовательности модулей текстур) Использовать комбинированные функции текстур для математического оперирования текстурой, фрагментом и значениями цвета Обрабатывать фрагменты после текстурирования с помощью вторичных цветов Выполнять матричные преобразования координат текстур Отображать тонированные объекты, основываясь на глубине 310 Глава 9 ° Наложение тексгур До настоящего момента мы либо однотонно закрашивали каждьш геометрический примитив,:шбо плавно изменяли цвет от вершины к вершине — то есть все примитивы были нарисованы без применения текстур.
Но если вам нужно нарисовать, например, большую кирпичную стену, не прибегая к текстурам, каждьш кирпич потребует собственный многоугольник. Без текстурирования большая плоская стена — сама являющаяся прямоугольником — может потребовать тысячи отдельных кирпичей, которые даже тогда могут производить нпечатление чересчур гладких и регулярных вместо того, чтобы давать реалистичную картинку. Наложение текстур позволяет вам вписать изображение кирпича кладки (полученное, скажем, сканированием фотографии реальной стены) в многоугольник н нарисовать полную сцену как один многоугольник.
Наложение текстур гарантирует, что прн трансформировании и воспроизвелении многоугольников не возникнут какие-тибо искажения. Например, когда стена уходит в перспективу, кирпичи должны выглядеть меньше своего действительного размера при удалении от точки наблюдения. Другие применения наложения текстур — отображение растительного мира в больших многоугольниках для представления земной поверхности в имитаторах полета; шаблоны рисунков для рабочего стола; текстуры, придающие многоугольникам вид природных материалов, таких как мрамор, дерево и тканевое полотно. Перечислить все невозможно.
Хотя естественнее думать о применении текстур в отношении многоугольников, текстуры могут быть применены к любым примитивам — точкам, линиям, битовым образам н изображениям. Пветные рисунки 6, 8, 18 — 21 и 24 — 32 демонстрируют использование текстур. По причине такого большого числа областей применения, наложегние текстур— довольно большая, сложная тема, и вы лолжны выбрать для себя из этой темы что-то более конкретное.
Большинство людей интуитивно понимают двухмерные текстуры, но ведь текстуры могут быть одномерными и даже трехмерными. Вы можете накладывать текстуры на поверхности, собранные из набора многоугольников, или на искривленные поверхности, и вы можете тиражировать текстуру в одном, двух илн более направлениях (в зависимости от того, сколько измерений для нее подразумевается), распространяя ее по поверхности. Кроме того, вы можете автогаатнчески отображать текстуру в объект так, чтобы выделить контуры или другие свойства просматриваемого элемента. Зеркальные объекты можно текстурировазь так, чтобы они, будучи в пентре помещения нли лругой планировки, отражали окружение на своих поверхностях.
Наконец, текстура может быть применена к поверхности различными способами. Это может быль непосредственная окраска (подобная переводной картинке), модуляция цвета поверхности в другом случае изи смешивание цвета текстуры с цветом поверхности. Если вы раньше нс сталкивались с наложением текстур, вам может показаться, что мы углубляемся в предмет по ходу этой главы быстрее, чем следовало бы. То.
гда в качестве дополнительного источника информации советуем просмотреть главу о наложении текстур в книге Ю Солгригег Сгпрл(сх Алана Уатта (А1ап Юац) (Лдо(зоп — Юез1еу, 1999). 11аложение текпур 311 Рис. 9.1. Процесс наложения текстур Обратите внимание на то, как деформируется текстура, чтобы соответствовать итьгрехугольнику.
В этом случае она растянута в х-направлении и сжата по у; чуть-чуть повернута и деформирована сдвигом. В зависимости от размера текстуРы, деформации четырехугольника и размеров изображения на экране некоторые гехселы могут быть отображены в более чем один фрагмент, а некоторые фрагневты могут покрывать несколько текселов. Так как текстура составлена из дискретных элементов (в нашем случае таких 256 х 256), при отображении текселов на фрагменты должна быть применена фильтрация. Например, если одному фрагменту соответствует множество текселов, их следует усреднить до нужного рзыера; если границы тексела пересекают границы фрагмента, для надлежащих тенселов определяется средневзвешенное значение.
Из-за этих вычислений текпурирование требует вычислительного ресурса, поэтому во многих специалиннрованных графических системах имеются средства для его аппаратной поддержки. Приложение может создавать объекты тестур, каждый из которых представляет отдельную текстуру (и, возможно, связанные множественные отображения, или М1Р-текстуры).
Некоторые реализации ОрепОЕ поддерживают специальный райояяй набор (ттогЫпй зег) объектов текстур, обеспечиваюгпий лучшую произвоннтельность по сравнению с внешними по отношению к набору текстурами. Эти нысокопроизводительные объекты текстур являются резидентными, а специаль- в й :т 3- си. я, э- гь Текстуры — это просто прямоугольные массивы данных — цвета, яркостя или цвета и альфа-компонент. Отдельные значения в массиве текстуры часто назынаются глекселами (1ехе1з).
Становятся сложными текстуры тогда, когда применяются к непрямоугольным областям, и во избежание излишней сложности это должно быть сделано разумным способом. Рисунок 9.1 иллюстрирует процесс наложения текстуры. Фигура слева представняет собой полную текстуру, где углы черного четырехугольного контура обозначают место, куда накладывается текстура.
Когда четырехугольник отображается нн экране, он может быть деформирован посредством различных преобразованнй — вращения, смешения, масштабирования и проецирования. Справа покаянна фигура в том виде, как она может выглядеть на экране после выполнения таких преобразований. (Заметьте, что этот четырехугольник вогнутый и может ныть воспроизведен Орепб(. некорректно, если не сделать предварительное разбиение, или тесселяцию. См.
главу 11 для получения большей информации о разбнении на многоугольники.) 312 Глава 9 ° Наложение текстур нос аппаратное или программное обеспечение предназначено для ускорения а обработки. С помощью ОрепСВ вы можете создавать или удалять объекты тег стур и составлять из интересуюших вас рабочий набор. Эта глава описывает средства ОрепСВ для наложения текстур и разбита на сж. дук1шис основные разделы: ° Общий обзор и пример. Дает краткое, общего уровня обозрение действий, вв.
полняемых при наложении текстур, включая относительно простой пример. ° Описание текстуры. Поясняет, как специфицирук>тся одномерные, двухмей ные или трехмерные текстуры. Здесь также рассказано, как использоваты~вницы текстур, как сделать серию связанных текстур раз личных размеров н хц управлять методами фильтрации, отвечающими за проецирование текстура в координаты зкрана. ° Фильтрация. Рассматривает увеличение и уменынение текстур при их приме ненни к пикселам многоугольников. Уменьшение (ш1п|бсайоп) связано гв специальными М!р-текстурами, о которых здесь также говорится.