Компьютерная графика. Лекция 6 М ЕТОДЫ ТЕКСТУРИРОВАНИЯ И АНТИАЛИАСИНГ.

Презентация:



Advertisements
Похожие презентации
Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
Advertisements

Текстура растровое изображение, накладываемое на поверхность полигона, из которых состоят 3D- модели, для придания ей цвета, окраски или иллюзии рельефа.
Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11.
Компьютерная графика – использование вычислительной техники для создания графических изображений, их отображения различными средствами и манипулирования.
Подготовила: студентка 2 курса Отделения МО Климко Ирина Графические форматы, используемые в Windows. Понятие цвета.
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
Прямые. Кривые. Поверхности Лекция 12. Алексей Игнатенко.
Растеризация Текстуры Композиты. На лекции 4-е задание Задача растеризации Текстурирование Определение Текстурные отображения для сферы, тора, цилиндра.
Текстуры. Композиты Лекция 11 Алексей Игнатенко. На прошлой лекции Удаление невидимых поверхностей Удаление нелицевых граней Алгоритм художника Двоичное.
Презентация к уроку © Составил : Габриков А. А. МУНИЦИПАЛЬНОЕ ОБЩЕОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ СРЕДНЯЯ ОБЩЕОБРАЗОВАТЕЛЬНАЯ ШКОЛА 7 г. ИРКУТСКА ИРКУТСК 2009.
Компьютерные изображения РастровыеВекторные Растровое изображение Векторное изображение Какформируетсяизображение? Где применяется? применяется? Как.
OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
Омпьютерная рафика Государственное образовательное учреждение начального профессионального образования ЯНАО «Надымское профессиональное училище» Работу.
OpenGL API Алексей Игнатенко (MSU Graphics & Media Lab) Алексей Игнатенко (MSU Graphics & Media Lab)
Кодирование информации Двоичное кодирование графической информации.
Растровая и векторная графика Решить задачи 1)Какой объем памяти необходим для хранения цифрового изображения, состоящего из 400 пикселов, где каждый.
РАСТРОВАЯ И ВЕКТОРНАЯ ГРАФИКА ГРАФИЧЕСКИЕ РЕДАКТОРЫ.
Компьютерная графика и её виды Выполнила : Садовникова Анастасия Группа : ИФБ -11.
Виды компьютерной графики Растровая графика Векторная графика Фрактальная графика Виды компьютерной графики отличаются принципами формирования изображения.
Кодирование графической информации Пространственная дискретизация.
Транксрипт:

Компьютерная графика. Лекция 6 М ЕТОДЫ ТЕКСТУРИРОВАНИЯ И АНТИАЛИАСИНГ

Текстурирование Очень часть поверхности не являются окрашенными в один цвет, а имеют некоторый нанесенный на них рисунок, узор Кожа Древесина Ткани Текстурирование – простой и достаточно эффективный способ повышения реалистичности изображения за счет детализации поверхности цветом Компьютерная графика. Лекция 6

Наложение текстуры или текстурирование (texture mapping) - это метод, посредством которого на поверхность объекта накладывается некоторое изображение, называемое изображением текстуры. Технология текстурирования заключается в проецировании изображения (текстуры) на трехмерную поверхность. Таким образом обеспечивается дополнительная детализация 3D объекта без усложнения его геометрии. Методы текстурирования (MIP- mapping, bump-mapping), фильтрации, сглаживания Компьютерная графика. Лекция 6

Методы текстурирования Когда изображение используется в качестве текстуры, накладываемой на 3D примитив, проявляется множество разнообразных ошибок визуализации, называемых артефактами. Компьютерная графика. Лекция 6

Сэмплинг (point-sampling) – простейший метод текстурирования, в котором текселы непосредственно переносятся в пикселы изображения с учетом масштаба. Методу присущ серьезный артефакт: когда наблюдатель приближается вплотную к текстурированной поверхности, происходит пикселизация. Для избежания этого артефакта используют методы текстурирования, основанные на фильтрации текстур. Сэмплинг и его артефакты Компьютерная графика. Лекция 6

Bi-linear filtering - это техника устранения искажений изображения (фильтрация), таких, как "блочность" текстур при их увеличении. При медленном вращении или приближении/ удалении объекта могут быть заметны "перескакивания" пикселов с одного места на другое, т.е. появляется блочность. Артефакты и билинейная фильтрация Компьютерная графика. Лекция 6

Во избежание этого эффекта применяют билинейную фильтрацию, при использовании которой в качестве цвета каждого пиксела берется взвешенное среднее значение (линейная интерполяция) цвета четырех смежных текселов. Результирующий цвет пиксела определяется в результате трех операций смешивания: сначала смешиваются цвета двух пар текселов по х, а потом смешиваются два полученных цвета по у. Артефакты и билинейная фильтрация Компьютерная графика. Лекция 6

Существует класс артефактов наложения текстур известный под названием " depth aliasing " (ошибки глубины сцены или Z-aliasing), от которых билинейная фильтрация не избавляет и не может избавить. Ошибки "depth aliasing" возникают из-за того, что объекты более отдаленные от наблюдателя, выглядят более маленькими на экране. Эти ошибки визуализации особенно нежелательны в анимации, где такие артефакты становятся причиной мерцания и эффекта медленного движения в той части изображения, которая должна быть неподвижной. Артефакты depth aliasing Компьютерная графика. Лекция 6

Если объект двигается и удаляется, то наложенное текстурное изображение становится все более и более сжатым. В конечном счете появляются ошибки визуализации. Как только вертикальная сторона квадрата (высота) сокращается до двух пикселей (см. напротив голубой стрелки), появляются артефакты "depth-aliasing" - несколько квадратов сливаются в один. Артефакты depth aliasing Компьютерная графика. Лекция 6

Одним из способов устранения depth aliasing, имеющим и самостоятельное значение, является перспективная коррекция. Перспективная коррекция – ресурсоемкая процедура (одна операция деления на каждый пиксел), поэтому 3D-ускорители реализуют ее аппаратно. Но разные ускорители достигают разного качества перспективной коррекции. Перспективная коррекция Компьютерная графика. Лекция 6

Для избегания ошибок "depth aliasing" и имитации того факта, что объекты на расстоянии выглядят менее детализированными, чем те, что находятся ближе к точке наблюдения, используется техника, известная как MIP-mapping (название происходит от лат. multum in parvo «много в малом»). Mip-mapping - наложение текстур, имеющих разную степень или уровень детализации, когда в зависимости от расстояния до точки наблюдения выбирается текстура с необходимой детализацией. Depth aliasing и MIP-mapping Компьютерная графика. Лекция 6

Слева направо мы имеем MIP-map уровни детализации 0, 1, 2 и т.д. Чем меньше становится изображение, тем больше теряется деталей, вплоть до самого маленького, когда не видно ничего, кроме расплывающегося пятна из серых пикселей. Depth aliasing и MIP-mapping Объем MIP-текстуры: Компьютерная графика. Лекция 6 Mip-текстура (mip-map) состоит из набора заранее отфильтрованных и масштабированных изображений. В изображении, связанном с уровнем mip-map, пиксель представляется в виде среднего четырех пикселей из предыдущего уровня с более высоким разрешением. Отсюда, изображение связанное с каждым уровнем mip-текстуры в четыре раза меньше по размеру предыдущего mip-map уровня.

Степень или уровень детализации - Level of Detail или просто LOD, используются для определения, какой mip-map уровень (или какую степень детализации) следует выбрать для наложения текстуры на объект. MIP-mapping и уровни детализации (LOD) Компьютерная графика. Лекция 6

Per-polygon mip-mapping (mip-текстурирование по каждому полигону). LOD вычисляется лишь раз для всего треугольника, следствием использования этого значения для всех пикселов треугольника становится эффект растрескивания (на рис. слева), когда некоторые треугольники, из которых состоит анимированный объект, вдруг внезапно становятся чрезмерно размытыми или с неровностями. Рer-pixel mip-mapping (попиксельное mip-текстурирование). Значение LOD вычисляется для каждого пиксела. В результате предотвращается появление ошибок визуализации и излишней размытости (на рис. справа). MIP-mapping и уровни детализации (LOD) Компьютерная графика. Лекция 6

MIP-текстурирование. Расчет LOD и фильтрация Пиксел в координатах (p, q) и его образ в текстуре (s, t). При наложении текстуры методом mip-mappingа первая задача – определить подходящий уровень детализации LOD, чтобы размер образа экранного пиксела на текстуре и размер тексела текстуры были максимально близки. Рассмотрим пиксел как квадрат со стороной = 1. Его образ в координатах (s, t) произвольный четырехугольник. Изменение s вдоль образа горизонтальной стороны пиксела определяется величиной s/ p рассчитанной в центре пиксела. Компьютерная графика. Лекция 6

Изменение t вдоль образа горизонтальной стороны пиксела аналогично приблизительно равно t/ p. Заменив p на q получим соотношения для вертикальной стороны пиксела ( s/ q, t/ q). Производные обычно приближаются конечными разностями значений на сторонах пикселов. В результате – варианты оценки размера пиксела (для комбинирования): – слегка размытое изображение; – изображение резкое, контрастное Компьютерная графика. Лекция 6 MIP-текстурирование. Расчет LOD и фильтрация

Получившиеся значения LOD и координат (s, t) вещественны. Существует три метода выбора цвета пиксела, основанные на данных оценках LOD: 1. Nearest (см. рис.): округляем LOD до ближайшего уровня, а (s, t) до ближайшего тексела 2. Linear: уровни детализации [LOD] и [LOD+1], на каждом берем цвет точки (s, t) округляя до ближайшего тексела, цвет пиксела определяем линейной интерполяцией цветов [LOD] и [LOD+1] по вещественному значению уровня LOD. 3. Trilinear: аналогичен Linear, но значения цвета на обоих уровнях, рассчитываются по методу Bilinear. Компьютерная графика. Лекция 6 MIP-текстурирование. Расчет LOD и фильтрация

В то время как mip-текстурирование решает проблему ошибок "depth-aliasing", его использование может стать причиной появления других артефактов. При удалении объекта от точки наблюдения, происходит переход от низкого mip-map уровня (соответствующего изображению с высокой детализацией) к высокому mip-map уровню (соответствующего изображению с высокой степенью фильтрации и низкой детализацией). В момент нахождения объекта в переходном состоянии от одного mip-map уровня к другому, появляется особый тип ошибок визуализации, известных под названием "mip-banding" (мип-бендинг) – полосатость или слоеность, т.е. явно различимые границы перехода от одного mip-map уровня к другому. MIP-текстурирование и mip-banding (полосатость) Компьютерная графика. Лекция 6

MIP-текстурирование и mip-banding (полосатость) Компьютерная графика. Лекция 6

Трилинейная фильтрация (tri-linear filtering) представляет собой технику, которая удаляет артефакты "mip-banding", возникающие при использовании mip-текстурирования. При трилинейной фильтрации берется блок из четырех текселей и находится среднее (интерполированное) значение цвета, как при билинейной, затем берется такой же четырехтексельный блок из соседнего mip-map уровня и так же усредняется. И после всего этого находится среднее значение между двумя полученными, которое и будет цветом обрабатываемого пикселя. MIP-banding и трилинейная фильтрация Компьютерная графика. Лекция 6

Эффективно удаляются линии, которые возникают на стыках mip-map уровней при билинейной фильтрации (см. рис). Трилинейная фильтрация требует дополнительных ресурсов, т.к. реализуется одновременной обработкой двух уровней текстур. MIP-banding и трилинейная фильтрация Компьютерная графика. Лекция 6

Так как билинейная и трилинейная фильтрации являются изотропными - изображение фильтруется в определенной форме - в форме квадрата. Большинство же формируемых объектов из-за проекционных искажений не подходят под эту форму: для их качественной обработки необходимо использовать другой тип фильтрации - анизотропный. Анизотропная фильтрация обычно оперирует не менее чем 8 текселями, во все стороны mip-map уровней, при этом используется модель неопределенной заранее формы. В результате убираются шумы и искажения объектов, а изображение в целом получается более качественным. Анизотропная фильтрация работает с текселами как с эллипсами и для получения одного пиксела обрабатывает до 32 (2х16) текселов. Анизотропная фильтрация (Anisotropic filtering) Компьютерная графика. Лекция 6

Качество текстуры при анизотропной фильтрации даже на дальних дистанциях остается схожей с оригинальным; при изотропной фильтрации же видна тенденция в "сглаживанию" изображения, в результате теряется качество. Анизотропная фильтрация, как и трилинейная, уменьшает неровность текстур. Но при использовании анизотропной фильтрации качество получается лучшим. Анизотропная фильтрация (Anisotropic filtering) Компьютерная графика. Лекция 6

Для того чтобы подчеркнуть бугорки и впадины рельефа с помощью светотени, надо затемнить либо осветлить стенки этих бугорков и впадин. Другой метод состоит в симуляции рельефности, глянцевой или зеркальной поверхности, отражением окружающей среды. Это и делает техника наложения рельефа. Рельефное текстурирование напоминает обычный процесс наложения текстуры на полигон, но текстуры, предназначенной для придания плоскому полигону зрительного ощущения рельефа и объемности. Эта техника может добавить детализацию сцене без создания дополнительных полигонов. Сам полигон остается плоским. Наложение рельефа (bump-mapping) Компьютерная графика. Лекция 6

Наложение рельефа (bump-mapping) Для реализации рельефного текстурирования в настоящий момент существует два подхода. Первый – реализация эффекта выдавливания ( embossed effect ) в процессе bump mapping, второй – использование карт окружающей среды ( environment-map bump mapping ). Компьютерная графика. Лекция 6

Техника выдавливания (embossing) использует карту высот для затенения и осветления определенных участков поверхности так, чтобы создавалось впечатление, что выпуклости отбрасывают тени. Метод реализован в современных 3D акселераторах. Техника выдавливания (embossing) Компьютерная графика. Лекция 6

Способ преобразования информации о высоте неровностей на карте высот в информацию о величине подстройки вектора нормали 1. Для каждого пиксела по высотам карты (bump map) рассчитывается вектор, указывающий направление уклона поверхности, т.е. вектор градиента: x_gradient = pixel(x-1, y) - pixel(x+1, y), y_gradient = pixel(x, y-1) - pixel(x, y+1 ), где х и y -- координаты соответствующего пиксела Красные векторы указывают на уменьшение высоты. Компьютерная графика. Лекция 6 Техника выдавливания (embossing)

2. Вектор нормали к поверхности корректируется для каждого пиксела на величину градиента New_Normal = Normal + (U * x_gradient) + (V * y_gradient) Получив новый вектор нормали, мы можете просчитать яркость данного пикселя. Полигон с изначальным вектором нормали, обозначенным n. Также показаны два вектора, которые будут использованы для изменения положения (направления) нормали к пикселю под ним. Оба вектора должны располагаться параллельно осям координат применяемой карты высот. Компьютерная графика. Лекция 6 Техника выдавливания (embossing)

Еще один способ реализации рельефного текстурирования - это техника текстурирования с использованием текстуры (карты) окружающей среды 3D сцены (Environment-Map Bump Mapping). Данный метод может быть реализован только при использовании акселераторов, которые поддерживают его аппаратно. В данном случае bump mapping будет использовать две текстуры (не считая базовой текстуры объекта). Environment-Map Bump Mapping Компьютерная графика. Лекция 6

Первая текстура – текстура с информацией об уклонах (ее еще можно назвать картой изменений высот; при выдавливании применялась просто карта высот). Эта текстура вырабатывается на основе карты высот путем анализа прилежащих друг к другу текселов. Акселератор использует эту информацию для изменения координат тексела в соответствии с информацией, поставляемой второй текстурой. Environment-Map Bump Mapping Компьютерная графика. Лекция 6

Вторая текстура – это карта окружающей среды, которая накладывается на исходный полигон, но уже с ST координатами, измененными процедурой отражения среды. Если изготовить environment map в виде яркостной карты, расположив источники света градиентно и по кругу (что-то похожее на эффект, проявляющийся при использовании инструмента "баллончик с краской" из графических программ), то мы получим результат похожий на выдавливание, но теперь мы не ограничены в количестве применяемых источников света, плюс наше освещение не обязательно должно быть монохромным. Environment-Map Bump Mapping Компьютерная графика. Лекция 6

Алиасинг – результат сэмплинга, то есть преобразования непрерывного изображения в дискретное. Алиасинг ухудшает качество изображения, вызывая разнообразные артефакты: такие, как лестничный эффект. Процедура сглаживания может помочь улучшить (или, как минимум, не ухудшить) качество графического изображения. В некоторых программах автоматическое применение сглаживания даже является одной из опций функции масштабирования. По предназначению антиалиасинг делится на краевой и полный. Сглаживание (anti-aliasing). Краевой антиалиасинг Компьютерная графика. Лекция 6

Сглаживание (anti-aliasing). Краевой антиалиасинг Краевой антиалиасинг (КАА) – механизм борьбы с лестничным эффектом. КАА сглаживает края полигонов и диагональные линии. Для реализации краевого антиалиасинга чаще всего используют технику усреднения по площади (area averaging). Цвет пиксела определяется на основании того, насколько каждый полигон перекрывает данный пиксел (см. рис). Компьютерная графика. Лекция 6

Anti-aliasing. Полный антиалиасинг Полный антиалиасинг, в отличие от краевого, направлен на полную нейтрализацию алиасинга, в том числе bleeding-а (просачивания цветов фона). Представителем полного антиалиасинга является субпиксельный антиалиасинг, который реализован в 3D-ускорителях. Компьютерная графика. Лекция 6

Anti-aliasing. Полный антиалиасинг Субпиксельный антиалиасинг базируется на технике суперсэмплинга. Суперсэмплинг означает, что вся сцена рендерится в каком-то большом виртуальном разрешении, а затем сжимается до фактического разрешения. В общем случае виртуальное и фактическое разрешения могут быть некратными. Компьютерная графика. Лекция 6

В некоторых 3D-ускорителях используется другой метод, основанный на хранении маски. Рассмотрим случай, когда 1 пиксел разбивается на 16 (4x4) субпикселов (эта техника называется мультисэмплингом ), а полигоны рендерятся front-to-back. Полный антиалиасинг. Мультисэмплинг и маски Компьютерная графика. Лекция 6

Когда рендерится полигон не переднем плане, субпикселы 2,3,4,7,8,12 окрашиваются в цвет переднего полигона и запоминаются как маска. Когда рендерится задний полигон, в его цвет окрашиваются субпикселы 1,5,6,9. Субпикселы 2,3, маскируются и остаются с цветом переднего полигона. В результате – никакого bleeding -а. Полный антиалиасинг. Мультисэмплинг и маски Компьютерная графика. Лекция 6

Недостаток такого антиалиасинга – это необходимость хранения маски для каждого пиксела и требование сортировки полигонов front-to-back. Второе требование можно обойти, сохраняя z-координату для каждого субпиксела. Хранить z-координаты для всех субпикселей на экране невозможно, так как это требует гигантского объема видеопамяти. Поддержку субпиксельного антиалиасинга с z-буферизацией реализует техника аккумулятора. В памяти аккумулятора последовательно проходят обработку субпиксельные фрагменты. Как следствие, - уменьшение производительности в число раз, равное числу субпикселов в пикселе. Например субпиксельный антиалиасинг 4x4 снижает производительность в 16 раз. Полный антиалиасинг. Мультисэмплинг и маски Компьютерная графика. Лекция 6

Н АЛОЖЕНИЕ ТЕКСТУРЫ В O PEN GL Компьютерная графика. Лекция 6

Принципы наложения текстуры Создание текстурного объекта Определение текстурной функции Задание текстурных координат для вершин примитивов Растеризация примитива Компьютерная графика. Лекция 6

Текстурные объекты Текстура – это объект OpenGL С каждым текстурным объектом связано его изображение, набор параметров и « имя » - целое число без знака OpenGL по умолчанию работает с текстурным объектом с индексом 0 Привязка к заданному текстурному объекту по его имени осуществляется при помощи команды glBindTexture Все последующие команды управляющие параметрами текстуры относятся к выбранному текстурному объекту Компьютерная графика. Лекция 6

Генерирование текстурных имен Выбор текстурного объекта осуществляется по его «имени» В сложных приложениях приходится иметь дело с большим количеством текстур Необходимо следить за тем, чтобы при создании новой текстуры ее имя не было связано с уже используемым текстурным объектом OpenGL позволяет получать имена текстурных объектов, имеющихся в свободном наличии Компьютерная графика. Лекция 6

Команда glGenTextures Команда glGenTextures позволяет сгенерировать заданное количество имен для текстурных объектов void glGenTextures( GLsizei n, GLuint *textures) GLuint textureName = 0; glGenTextures(1, &textureName); glBindTexture(GL_TEXTURE_2D, textureName); Компьютерная графика. Лекция 6

Удаление текстуры Ставшие ненужными текстурные объекты необходимо удалить с целью освобождения памяти Если удаляемый объект текстуры был ранее выбран при помощи команды glBindTexture, то происходит выбор текстурного объекта с индексом 0 Текстурный объект 0 не может быть удален Будучи удаленным, текстурный объект не имеет ни размеров, ни содержимого. Его имя становится свободным для повторного использования Компьютерная графика. Лекция 6

Команда glDeleteTextures Команда осуществляет удаление указанных текстурных объектов void glDeleteTextures( GLsizei n, const GLuint *textures) GLuint textureName; glGenTextures(1, &textureName);... glDeleteTextures(1, &textureName); Компьютерная графика. Лекция 6

Текстурная функция В процессе растеризации OpenGL интерполирует значение текстурных координат вершин по поверхности примитива с учетом перспективы Для каждого фрагмента вычисляются его координаты в текстурном пространстве Текстурная функция отображает значение текстурной координаты в значение некоторой величины, например, цвета, влияющего на финальный цвет фрагмента Компьютерная графика. Лекция 6

Задание текстурной функции Вначале задается текстурная функция в текстурном пространстве например texture(s,t) – двухмерное текстурное пространство Данная функция генерирует значения цвета или яркости для каждого значения текстурных координат в диапазоне от 0 до 1 Компьютерная графика. Лекция 6

Способы задания текстурных функций Растровые текстуры Значение функции вычисляется на основе выборки значений из растрового изображения в качестве дискретных значений функции Процедурные текстуры Вычисляют значение функции в данной точке на основе заданной формулы Шахматная доска Фрактал Мраморные поверхности OpenGL поддерживает процедурные текстуры при помощи фрагментных (пиксельных) шейдеров Компьютерная графика. Лекция 6

Создание изображения OpenGL накладывает ограничения на размеры текстуры Ширина и высота должны быть степенью двойки OpenGL принимает данные о текстуре в строго заданных форматах. Загрузка изображения из файла и представление их в пригодном для OpenGL виде – забота приложения Компьютерная графика. Лекция 6

Текстурное изображение Для того, чтобы OpenGL мог вычислить значение текстурной функции, необходимо задать эту функцию Стандартный способ задания текстурной функции – задание текстурного изображения Текстурное изображение определяет дискретные значения текстурной функции в диапазоне текстурных координат от 0 до 1 Компьютерная графика. Лекция 6

Типы текстур OpenGL позволяет осуществлять наложение различных типов текстур Одномерные текстуры Двумерные текстуры Трехмерные текстуры Кубические текстуры Для каждого типа текстур в OpenGL имеется функция, создающая текстурное изображение Компьютерная графика. Лекция 6

Семейство команд glTexImage* Данные команды задают текстурное изображение определенного типа для текущего текстурного объекта glTexImage1D задает изображение одномерной текстуры glTexImage2D задает изображение двумерной текстуры или одну из шести текстур кубической текстуры glTexImage3D задает изображение для трехмерной текстуры Компьютерная графика. Лекция 6

Представление текстурного изображения в памяти В зависимости от формы используемой команды glTexImage* приложение должно сформировать в памяти одно-, двух-, или трехмерный массив элементов определенного типа и размерности Например, 24 битному BMP изображению может соответствовать двухмерный массив троек 8- битных чисел Компьютерная графика. Лекция 6

Формат текстуры в OpenGL Изображение внутри OpenGL хранится в виде одно-, двух- или трехмерного массива числовых значений определенного типа, задающих цвета пикселей в одном из следующих форматов: GL_ALPHA GL_LUMINANCE GL_LUMINANCE_ALPHA GL_INTENSITY GL_RGB GL_RGBA Компьютерная графика. Лекция 6

Загрузка текстурных данных из файла Приложение должно загрузить данные из графического файла, при необходимости распаковав их, и представить их в одном из следующих форматов: GL_COLOR_INDEX GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_RGB GL_RGBA GL_BGR_EXT GL_BGRA_EXT GL_LUMINANCE GL_LUMINANCE_ALPHA Компьютерная графика. Лекция 6

Наложение текстуры Двумерное текстурное пространство Трехмерное пространство z x y s t Компьютерная графика. Лекция 6

Наложение текстуры Компьютерная графика. Лекция 6

Текстурные координаты Помимо координат в пространстве или направления вектора нормали с каждой вершиной полигона ассоциируются координаты данной вершины в текстурном пространстве Пространство одномерной текстуры - прямая Пространство двумерной текстуры – двумерная плоскость Пространство трехмерной или кубической текстуры – трехмерный объем Компьютерная графика. Лекция 6

Команда glTexCoord Команда glTexCoord*() позволяет указать значение текущих текстурных координат При создании вершины с помощью команды glVertex* текущая текстурная координата становится атрибутом созданной вершины При рисовании текстурированных примитивов не забывайте указывать текстурные координаты вершины перед выполнением glVertex Компьютерная графика. Лекция 6

Необходимые действия для создания изображения с текстурой Создать изображение Подойдет любой графический редактор Создать из данного изображения текстуру – образ в памяти Задать параметры текстуры и ее взаимодействия с объектом, на который она будет накладываться Компьютерная графика. Лекция 6

Вариант задания текстурных координат s t (1, 0) (0, 0) (0, 1) (1, 1) Компьютерная графика. Лекция 6

Включение текстурирования Текстурирование включается при помощи команды glEnable(GL_TEXTURE_2D) или glEnable(GL_TEXTURE_1D) Компьютерная графика. Лекция 6

Уровни детализации текстуры OpenGL позволяет задать для текстуры несколько изображений, соответствующих различным уровням детализации Для изображения текстуры на маленьких объектах OpenGL будет использовать текстуры с меньшим уровнем детализации Расход памяти при этом будет больше всего лишь на 1/3 в случае двухмерной текстуры Использование различных уровней детализации может увеличить скорость и качество наложения текстуры Уровень детализации указывается при использовании команд glTexImage*D Компьютерная графика. Лекция 6

Изображения, соответствующие различным уровням детализации (mip-maps) Компьютерная графика. Лекция 6

Автоматическое создание mip-maps Библиотека GLU содержит функции для автоматического создания текстуры с различными уровнями детализации gluBuild1DMipmaps gluBuild2DMipmaps Компьютерная графика. Лекция 6

Пример Компьютерная графика. Лекция 6

Для чего нужна фильтрация текстур? Экран, как и растровое изображение, соответствующее текстуре, состоит из дискретных пикселей При большом увеличении нескольким пикселям экрана может соответствовать один тексель – будет видна мозаичная структура текстуры При уменьшении одному пикселю экрана может соответствовать несколько пикселей текстуры. При движении это может создавать рябь Компьютерная графика. Лекция 6

Фильтрация текстур Фильтрация текстур определяет то, каким образом будут выбираться пиксели текстуры при растеризации Стандартно в OpenGL существуют два фильтра: фильтр, работающий при уменьшении текстуры фильтр, работающий при увеличении текстуры Компьютерная графика. Лекция 6

Указание режима фильтрации текстуры Режимы фильтрации текстуры и некоторые другие параметры устанавливаются при помощи функции glTexParameter glTexParameter[i f] (GLenum target, GLenum pname, GLenum param) glTexParameter[i f]v (GLenum target, GLenum pname, const GLenum *param) Компьютерная графика. Лекция 6

Фильтр увеличения glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, filter) Параметр filter принимает значения: GL_NEAREST GL_LINEAR Компьютерная графика. Лекция 6

Фильтр уменьшения glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, filter) Параметр filter принимает значения: GL_NEAREST GL_LINEAR GL_NEAREST_MIPMAP_NEAREST GL_NEAREST_MIPMAP_LINEAR GL_LINEAR_MIPMAP_NEAREST GL_LINEAR_MIPMAP_LINEAR Компьютерная графика. Лекция 6

Параметры текстуры С каждым текстурным объектом ассоциируются определенный набор параметров Фильтры уменьшения/увеличения Способ вычисления текстурной функции в зависимости от соотношения размеров примитива и текстурного изображения «Заворачивание» текстурных координат Правила вычисления текстурной функции для координат, выходящих за пределы диапазона [0; 1] Приоритет текстуры Управляет резидентным размещением текстуры в быстрой памяти в случае ее нехватки Компьютерная графика. Лекция 6

Команда glTexParameter Данная команда позволяет устанавливать значение скалярного либо векторного целочисленного или вещественного параметра текстуры Синтаксис: void glTexParameter[i f]( GLenum target, GLenum pname, Type param) void glTexParameter[i f]v( GLenum target, GLenum pname, const Type *param) Параметры: target - тип текстуры (например GL_TEXTURE_2D) pname – имя параметра param – значение указанного параметра Компьютерная графика. Лекция 6

«Заворачивание» (Wrap) текстурных координат Значение текстурной функции определено для координат, компоненты которых находятся в интервале от 0 до 1 Координаты вершины в текстурном пространстве могут выходить за пределы данного интервала Использование матрицы текстурных координат также может приводить к выходу за пределы заданного диапазона OpenGL позволяет задать способ вычисления текстурной функции за границами допустимого диапазона Режим заворачивания определяет способ отображения «неправильных» координат внутрь допустимой области Компьютерная графика. Лекция 6

Установка режима заворачивания Установка режима заворачивания текстурной координаты осуществляется при помощи вызова команды: glTexParameteri(target, wrapCoord, wrapMode) target – тип текстуры (например GL_TEXTURE_2D) wrapCoord GL_TEXTURE_WRAP_S GL_TEXTURE_WRAP_T GL_TEXTURE_WRAP_R (GL_TEXTURE_WRAP_R_EXT) wrapMode – режим заворачивания Компьютерная графика. Лекция 6

Режимы заворачивания GL_CLAMP ½ edge + ½ border GL_CLAMP_TO_EDGE (GL_CLAMP_TO_EDGE_EXT) edge only GL_CLAMP_TO_BORDER (GL_CLAMP_TO_BORDER_ARB) border only GL_REPEAT отброс целой части текстурной координаты GL_MIRRORED_REPEAT (GL_MIRRORED_REPEAT_ARB) зеркальное отражение по границе текстуры Компьютерная графика. Лекция 6

Применение режимов заворачивания Применение различных режимов заворачивания координат позволяет осуществить: Заполнение большой площади при помощи небольших шаблонов обои, кирпичи, ткань, кафельная плитка и т.п. вывод одиночных изображений бесшовная стыковка текстур Компьютерная графика. Лекция 6

Включение/выключение текстурирования Включение/выключение наложения текстуры на примитивы осуществляется при помощи команд glEnable/glDisable c параметрами GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D GL_TEXTURE_CUBEMAP Наложение текстуры не работает при отсутствии текстурного изображения для выбранного текстурного объекта Компьютерная графика. Лекция 6

Texture 1 Texture 2 glBindTexture(GL_TEXTURE_2D, 1); glTexImage2D(...); glTexParameteri(GL_TEXTURE_2D,...); glBindTexture(GL_TEXTURE_2D, 2); glTexImage2D(...); glTexParameteri(GL_TEXTURE_2D,...); glBindTexture(GL_TEXTURE_2D, 1); glEnable(GL_TEXTURE_2D); drawCube(); glBindTexture(GL_TEXTURE_2D, 2); drawSphere(); Texture 0

Взаимодействие текстуры с объектом Цвет текстуры должен каким-то образом взаимодействовать с цветом объекта, на который накладывается текстура OpenGL позволяет задать несколько режимов смешивания цветов объекта и текстуры Компьютерная графика. Лекция 6

Установка режима взаимодействия текстуры и объекта Устанавливается при помощи функции glTexEnv* void glTexEnv[i f](GLenum target, GLenum pname, GLtype param) void glTexEnvf[i f]v(GLenum target, GLenum pname, const GLtype *param) Компьютерная графика. Лекция 6

Установка режима взаимодействия glTexEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, mode) Параметр mode принимает значения: GL_MODULATE GL_DECAL GL_BLEND GL_REPLACE GL_ADD Компьютерная графика. Лекция 6

Прямоугольник без текстуры Компьютерная графика. Лекция 6

Текстура с альфа-каналом Компьютерная графика. Лекция 6

GL_REPLACE Компьютерная графика. Лекция 6

GL_MODULATE Компьютерная графика. Лекция 6

GL_DECAL Компьютерная графика. Лекция 6

GL_ADD Компьютерная графика. Лекция 6

Что такое мультитекстурирование? Начиная с версии 1.3 в библиотеке OpenGL появилась поддержка нескольких блоков текстурирования (texture units) Мультитекстурирование позволяет накладывать на примитив две или более различных текстур одновременно Количество зависит от реализации и не превышает 8 Компьютерная графика. Лекция 6

Применение мультитекстурирования Shadow maps Наложение текстуры теней на поверхность объектов в дополнение к основной текстуре Detail textures Увеличение детализированности поверхности объекта за счет добавления высокочастотной текстуры мелких деталей к низкочастотной основной текстуре Environment mapping Наложение текстуры окружающей среды на объект в дополнение к основной текстуре Bump mapping Дополнительные текстуры могут нести информацию о неровностях поверхности Компьютерная графика. Лекция 6

Использование мультитекстурирования Мультитекстурирование было добавлено с сохранением обратной совместимости с версией Для доступа к текстурному блоку приложение должно сделать его активным при помощи команды glActiveTexture Компьютерная графика. Лекция 6

Как работает мультитекстурирование После определения цвета фрагмента, полученного в результате интерполяции цветов вершин примитива, OpenGL выполняет наложение текстуры на фрагмент во всех текстурных блоках, в которых разрешено наложение текстуры Цвет полученный на выходе текстурного модуля 0 становится выходным для текстурного модуля 1 и т.д. Режим наложения текстуры определяется при помощи функции glTexEnv. Компьютерная графика. Лекция 6

Принцип работы мультитекстурирования Компьютерная графика. Лекция 6

Мультитекстурирование в Windows Библиотека OpenGL.dll в системах Windows содержит версию OpenGL 1.1 Функции, появившиеся в старших версиях OpenGL, в этой dll отсутствуют Однако они доступны в виде расширений OpenGL Для поддержки мультитекстурирования следует пользоваться расширением GL_ARB_multitexture Компьютерная графика. Лекция 6