OpenGL. Руководство по программированию (Библиотека программиста) (2006). Ву М., Девис Т., Нейдер Дж., Шрайнер Д (1124475), страница 66
Текст из файла (страница 66)
Но если вам нужно нарисовать, например, большую кирпичную стену, не прибегая к текстурам, каждьш кирпич потребует собственный многоугольник. Без текстурирования большая плоская стена — сама являющаяся прямоугольником — может потребовать тысячи отдельных кирпичей, которые даже тогда могут производить нпечатление чересчур гладких и регулярных вместо того, чтобы давать реалистичную картинку. Наложение текстур позволяет вам вписать изображение кирпича кладки (полученное, скажем, сканированием фотографии реальной стены) в многоугольник н нарисовать полную сцену как один многоугольник. Наложение текстур гарантирует, что прн трансформировании и воспроизвелении многоугольников не возникнут какие-тибо искажения. Например, когда стена уходит в перспективу, кирпичи должны выглядеть меньше своего действительного размера при удалении от точки наблюдения.
Другие применения наложения текстур — отображение растительного мира в больших многоугольниках для представления земной поверхности в имитаторах полета; шаблоны рисунков для рабочего стола; текстуры, придающие многоугольникам вид природных материалов, таких как мрамор, дерево и тканевое полотно. Перечислить все невозможно. Хотя естественнее думать о применении текстур в отношении многоугольников, текстуры могут быть применены к любым примитивам — точкам, линиям, битовым образам н изображениям. Пветные рисунки 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п|бсайоп) связано гв специальными М!р-текстурами, о которых здесь также говорится. ° Объекты текстур. Описывает помещение изображений текстур в объекты тзк что вы гиожете управлять несколькими текстурами одним лействием. С повю. щью объектов текстур вы можете создать высокопроизводительный набор рс. зндентных объектов текстур. Вы можете также расставить приоритеты длн объектов текстур, регулируя тем самым способность к нахождению текстуз в резидентном состоянии. ° Функции текстур.
Повествует о методах, используемых для окрашивання пс. всрхностей текстурами. Вы можете заменить другим оригинальный цвет объех. та или получить результируюгпнй цвет смешиванием цвета объекта и текстурц ° Присвоение координат текстур. Описывает то, как вычислить и присвоить соответствуюгпис координаты текстуры вершинам объекта. Здесь также гонь рится об управлении поведением координат, лежапгих вне диапазона по умов. чанию — то есть о том, как распределить текстуры по поверхности. ° Автоматическая генерация координат текстур. Показывает, как ОрепС1 ав. томатически генерирует координаты текстур, ко~орые позволяют добиться тиких аффектов, как отображение контуров предметов и структуры природныг объектов. ° Мультитекстурирование. Подробно описывает процесс применения текстур в нескольких конвейерах, последовательно осуществляющих текстурирование ° Комбинирование функций текстур.
Объясняет, как вы можете управлять математическими онерацнямп (уьшожен не, сложение, вьшитание, интерполяция и даже скалярное произведение (дог ргог)цсг)) над ЕСВ- и альфа-значениями текстур, постоянными цветами и входящими фрагментами. Комбинирование функций предоставляет возможность гибкой, программно управляемой обработки фрагментов. ° Применение вторичного цвета после текстурирования. Показывает, как првменнть вторичные цвета к фрагментам, прошедшим текстурирование. Наложение текстур 313 ° Стек матриц текстур. Описывает способы управления стеком матриц текстур и использование гу-координатьь В версии ОрепС) 1.1 было представлено несколько операций наложения текпур: ° дополнительные форматы внутреннего представления изображений текстур; ° текстуры-посредники, для оценки возможности выделения ресурсов для изображений текстур; ° текстуры в составных частях изображения, позволяюшие заменить как все изображение текстуры, так и его части, вместо удаления (создания) текстуры, дающего тот же эФфект; ° задание данных текстуры из памяти буфера кадров (а также из системной памяти); ° объекты текстур, включая резидентные текстуры и расстановку прио(пгтетов.