Растеризация Текстуры Композиты
На лекции 4-е задание Задача растеризации Текстурирование Определение Текстурные отображения для сферы, тора, цилиндра Рельефное текстурирование (bump-mapping) Текстурирование в OpenGL Композиты Определение Алгебра композитов Композиты в OpenGL
4-е задание: визуализация односторонних поверхностей Лист Мёбиуса Бутылка Клейна
Конвейер Обработка вершин и сборка примитивов Растеризация и обработка фрагментов Операции над пикселями Передача данных в буфер кадра Текстуры Источники света Атрибуты вершин Вершина любого объекта в момент определения немедленно передается в конвейер, и проходит все его ступени 3D координаты -> экранные
Растеризация
Генерация изображения P1 P2 P3 P4 1.Растеризовать примитив 2.Вычислить цвет каждого пикселя 3.Скомбинировать с цветом фона
Растеризация P1 P2 P3 P4 Линия развертки (scanline)
Вычисление цвета пикселя P1 P2 P3 P4 1.Цвет материала C m 2.Цвет текстуры C t 3.Цвет фона C b
Вычисление цвета пикселя: цвет материала P1 P2 P3 P4 1.Цвет материала C m 2.Цвет текстуры C t 3.Цвет фона C b
Вычисление цвета пикселя: закраска Фонга (1/2)
Вычисление цвета пикселя: закраска Фонга (2/2)
Вычисление цвета пикселя: цвет текстуры P1 P2 P3 P4 1.Цвет материала C m 2.Цвет текстуры C t 3.Цвет фона C b
Отображение текстуры (Texture mapping) Общее отображение текстуры Узор, определенный в 2D области, «наклеивается» на объект как кусок обоев и, фактически становится частью объектной базы данных. Когда объект перемещается, текстурный узор перемещается вместе с ним. Разнообразие технологий View-dependent mapping techniques. Bump mapping techniques. Displacement mapping techniques … (с)
Текстурирование: постановка задачи Текстура – часть модели освещения и часть геометрической модели Какой атрибут или параметр модулируется, чтобы получить желаемый эффект? Как осуществляется отображение? Если текстура определена в 2D области, а объект существует в 3D пространстве, нам необходимо определить отображение между этими областями.
Зеркальное отражение (Фонг)
Атрибуты (параметры) I r = k a *I a + I i (k d *(N.L) + k s *(R.V) α ) отражение от поверхности - surface color texture вектор нормали N - bump mapping коэффициенты k d, k s, - specularity mapping падающий свет I i - environment mapping геометрия - displacement mapping прозрачность - transparency mapping
Отображение текстуры Задать соответствие между координатами изображения текстуры и точками объекта Для полигонального предсталения используется соответствие на вершинах
Пример отображение текстуры : Цилиндр
Пример отображение текстуры : Цилиндр (2) P - точка нанесения текстуры Перевести P в параметрические координаты (s,t) s - угловая координата в радианах от оси Х t - координата высоты
Пример отображение текстуры : Цилиндр (3)
Другие поверхности Параметрические (В-сплайн) поверхности Полигональные поверхности Неявно заданные поверхности
Bump mapping
Bump mapping (2)
Закраска Фонга и рельефное текстурирование
Виды рельефных текстур
Визуализация текстуры P1 (s1, t1) P4 (s4, t4) P2 (s2, t2) P3 (s3, t3)
Фильтрация текстур MagnificationMinification
Фильтрация текстур: метод ближайшего соседа Выбирается цвет ближайшего соответствующего пикселя текстуры Быстрый метод Низкое качество
Фильтрация текстур: Билинейная фильтрация Четыре пикселя текстуры, ближайшие к текущей точке экрана Результирующий цвет – смешение цветов этих пикселей Быстро, достаточно качественно За исключение случаев, когда смотрим на плоскость под углом
Фильтрация текстур: MIP – mapping (multum in parvo) Выбирается подходящий уровень мипмапа чем больше размер "образа" пикселя в текстуре, тем меньший мипмап берется Далее значения в мипмапе могут усредняться билинейно или методом ближайшего соседа (как описано выше) Дополнительно происходит фильтрация между соседними уровнями мипмапа (трилинейная фильтрация)
Фильтрация текстур: анизотропная фильтрация Вместо квадратного фильтра, используется вытянутый Позволяет более качественно выбрать нужный цвет для экранного пикселя
Сравнение фильтраций Ближайший соседБилинейная Трилинейная Анизотропная
GLuint texture; glGenTextures(1,&texture); Создаем текстуру - прямоугольный массив с цветами пикселов. Высота и ширина должны быть степенями двойки. RGB NM …RGB 1M RGB 0M ………… RGB N1 …RGB 11 RGB 01 RGB N0 …RGB 10 RGB 00 Получаем номер текстурного объекта Активизируем текстурный объект glBindTexture(texture); Текстурирование в OpenGL
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR); Загружаем текстуру Устанавливаем режимы текстурирования glPixelStorei(GL_UNPACK_ALIGNMENT,1); glTexImage2D(GL_TEXTURE_2D, 0, // Mip-level GL_RGB, // Формат текстуры tex_width,tex_height, 0, // Ширина границы GL_RGB, // Формат исходных данных GL_UNSIGNED_BYTE, // Тип данных tex_bits); // Исходные данные Текстурирование в OpenGL (2)
Разрешаем текстурирования Задаем текстурные координаты glEnable(GL_TEXTURE_2D); glTexCoord2d(u,v); Возможно, потребуется включить режим перспективного текстурирования glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); Возвращаем номер текстурного объекта в список свободных glDeleteTextures(1,&texture); Текстурирование в OpenGL (3)
Генерация текстурных координат Автоматическая генерация текстурных координат glTexGen{ifd}[v]() Режимы генерации координат: GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP Координаты считаются как расстояние от заданной плоскости Ax+By+Cz+D=0
Композиты
Композирование Compositing n. : The combining of two or more separately prepared images into one, usually through pixel-by-pixel transparency (or alpha) computation, and sometimes with z comparison. Also, composit v.t. : to perform compositing; adj. : being composited; n. : the result of compositing.
Композирование: Определение Композирование Объединение двух или более независимо подготовленных изображений в одно изображение, обычно с помощью попиксельного вычисления полупрозрачности (альфа-канал), иногда с учетом глубины (z- координаты) Смешение, Монтаж (Compositing)
Альфа-канал Кодирует информацию о покрытии пикселя: α = 0 : нет покрытия (прозрачный) α = 1 : полное покрытие (непрозрачный) 0 < α < 1 : частичное покрытие (полупрозрачный) Пример: α = 0.3
Композирование с альфа- каналом Альфа-канал управляет линейной интерполяцией фоновых и передних пикселей при композировании
Полупрозрачные объекты Предложим, мы рисуем изображение А поверх B поверх фона G Насколько A блокирует B ? α A Насколько B видно через A? 1-α A Насколько G видно через A и B ? (1-α A ) (1-α b )
Непрозрачные объекты Как мы можем комбинировать два частично перекрытых пикселя? 3 возможных цвета (0, A, B) 4 региона (0, А, B, AB)
Композитная алгебра Портера-Даффа 12 возможных комбинаций
Оператор Over
Композирование в OpenGL Включить режим композирования glEnable(GL_BLEND) Задать функции источника и приемника glBlendFunc(source_function, dest_function) Пример: оператор A over B glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) Задать альфа-канал в вершинах или в текстуре glColor(R,G,B,A); Выключить режим композирования glDisable(GL_BLEND);
Итоги Задача растеризации Найти пиксели (фрагменты), соответствующие примитиву и вычислить их цвет в соответствии с моделью освещения, текстурой, операцией композирования Текстурирование Отображение изображения на поверхность модели Различные виды текстурирования Композирование Способ комбинации пикселей растеризуемого примитива и фона Композитная алгебра