Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11.

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



Advertisements
Похожие презентации
Современные графические технологии ИЛИ OpenGL и графические процессоры 2010.
Advertisements

OpenGL Лекция 3. Построение тени Проективные тени Объемные тени Карты теней Мягкие тени.
OpenGL Лекция 2.. Преобразование координат Преобразования координат.
Текстуры. Композиты Лекция 11 Алексей Игнатенко. На прошлой лекции Удаление невидимых поверхностей Удаление нелицевых граней Алгоритм художника Двоичное.
OpenGL API Алексей Игнатенко (MSU Graphics & Media Lab) Алексей Игнатенко (MSU Graphics & Media Lab)
GPU vs. CPU 302 млн. транзисторов Тактовая частота 550Mhz 1GB 850x2 MHz памяти 380 млн. транзисторов Тактовая частота 650Mhz 1GB 775x2 MHz памяти Тактовая.
{ OpenGL Лекция 3 ( ). float ambient[4] = {0.0, 0.0, 0.0, 1.0}; glLightModelfv(GL_LIGHT_MODEL_AMBIENT, ambient); // RGBA интенсивность всей сцены.
Освещение и текстурирование в OpenGL Астана 2004 Лекция 10.
GPU vs. CPU 681 млн. транзисторов Тактовая частота 575Mhz * 768MB 1.8 Ghz памяти DDR4 ~650 млн. транзисторов Тактовая частота ~700Mhz 1GB 1.1 Ghz памяти.
Растеризация Текстуры Композиты. На лекции 4-е задание Задача растеризации Текстурирование Определение Текстурные отображения для сферы, тора, цилиндра.
OpenGL Лекция 4 ( ). void glVertexPointer( GLint size, GLenum type, GLsizei stride, void *ptr ) size определяет число координат вершины (2, 3,
OpenGL и аппаратные ускорители графики Астана 2004 Лекция 8.
OpenGL Графические библиотеки 2D –GAPI –GDI –XWindow –GTK –QT 3D –DirectX –OpenGL.
Компьютерная графика. Лекция 6 М ЕТОДЫ ТЕКСТУРИРОВАНИЯ И АНТИАЛИАСИНГ.
Текстуры. Композиты Чепурнова Екатерина Graphics & Media Lab.
Удаление невидимых поверхностей Дано: камера (наблюдатель) набор объектов Задача - определить видимые объекты Проблема: объекты при проектировании могут.
Прямые. Кривые. Поверхности Лекция 12. Алексей Игнатенко.
Графический конвейер Преобразования геометрии Александр Шубин.
Технологии 3D рендера в проектах"Ил-2 и "Второй мировой". Юрий Крячко, 1C.
Астана ( )Компьютерная графика (лекция 6) ВВЕДЕНИЕ В OPENGL Лекция 6.
Транксрипт:

Фильтрация текстур. Пиксельные операции. Астана 2004 Лекция 11

Фильтрация текстур Выборка ближайшего текселя GL_NEAREST: Линейная комбинация 4-x соседних пикселей GL_LINEAR:

Фильтрация текстур: mipmapping увеличение текстуры масштаб 1:1 уменьшение текстуры увеличение текстуры масштаб 1:1 уменьшение текстуры в 2 раз

Фильтрация текстур: mipmapping. Часть 2 256x x64 216x16 4 Трилинейная фильтрация GL_LINEAR_MIPMAP_LINEAR

Анизотропная фильтрация Экран Расширение GL_EXT_texture_filter_anisotropic

Использование текстуры как фонового изображения Устанавливаем ортогональную проекцию glMatrixMode(GL_PROJECTION); glLoadIndentity(); glOrtho(-1,1,-1,1,-1,1); Устанавливаем ортогональную проекцию glMatrixMode(GL_MODELVIEW); glLoadIndentity(); Рисуем прямоугольник glEnable(GL_TEXTURE_2D); glBindTexture(bktex); glBegin(GL_QUADS); glTexCoord2f(0,0); glVertex2f(-1,-1); glTexCoord2f(1,0); glVertex2f(1,-1); glTexCoord2f(1,1); glVertex2f(1,1); glTexCoord2f(0,1); glVertex2f(-1,1); glEnd();

Текстура и освещение RGBA f из модуля T&LRGBA t текстурыRGBA с результат += Модулирование GL_MODULATE (по умолчанию) Смешение GL_DECAL,GL_BLEND Замещение GL_REPLACE Demo

Генерация текстурных координат Линейная зависимость Environment mapping - эффект отражающей поверхности r n hP (u,v)

Генерация текстурных координат. Продолжение Включаем автоматическую генерацию текстурных координат (для первыхдвух координат) glEnable(GL_TEX_GEN_S); glEnable(GL_TEX_GEN_T); Включаем автоматическую генерацию текстурных координат (для первых двух координат) glTexGeni(GL_S,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP); glTexGeni(GL_T,GL_TEXTURE_GEN_MODE,GL_SPHERE_MAP);

Кубические карты среды. n P е r R Точка R определяет одну из шести текстур и текстурные координаты. Расширение GL_EXT_cube_map

Преобразование текстурных координат Работаем с матрицей T точно также как с M и P. glMatrixMode(GL_TEXTURE); glLoadIdentity(); glMultMatrix(…); Позволяет существенно изменять вид объекта не изменяя геометрии

Пиксельные операции T&L Rasterization Pixel Ops Буфер кадра Буфер глубины Буфер трафарета Буфер аккумулятора

Пиксельные операции. Продолжение. Scissor testAlpha test Stencil testDepth testBlending Stencil Buffer: S ij Z Buffer: Z ij Frame buffer: RGBA ij

Scissor & Alpha test Не записывать пиксел Нет Да glScissor(x,y,w,h); glEnable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST); glEnable(GL_SCISSOR_TEST); glDisable(GL_SCISSOR_TEST); glAlphaFunc(GL_GREATER,0.5);

Смешение цветов glEnable(GL_ENABLE); glDisable(GL_DISABLE); glBlendFunc(sfactor,dfactor) Команды OpenGL: glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA): glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA): glBlendFunc(GL_ZERO,GL_SRC_COLOR):

Полупрозрачные объекты Полупрозрачная грань - грань через часть пикселов которой видно лежащие за ней грани. Ключевые команды glAlphaFunc и glBlendFunc Полупрозрачные грани необходимо выводить в порядке back-to-front. Применение метода Z-буфера ведет к визуальным артефактам -глюкам :) Для выпуклых объектов можно выводить сначала нелицевые грани, а затем - лицевые. Объекты можно выводить методом художника - сортировать по убыванию координат Z центров.

Карты освещенности (lightmaps) (i,j) Карта освещенности: Мультитекстурирование: Экономия количества примитивов при динамическом освещении Экономия текстур при статическом освещении Возможен предварительный расчет освещения

Мультитекстурирование F(RGBA c,RGBA 0 ) RGBA 0 Texture 0 Lighting RGBA c RGBA 1 Texture 1 RGBA f F(RGBA f,RGBA 1 ) Объединение текстуры объекта и текстуры среды Расширение GL_ARB_multitexture

Буфер трафарета и буфер глубины RGBA x,y =F(RGBA x,y,RGBA f ) Изменение S x,y Да Нет Не записывать пиксел void glStencilOp(GLenum failOp, GLenum zfailOp, GLenum zpassOp); failOp: zfailOp: zpassOp: void glStencilFunc(GLenum func, GLint ref, GLuint mask); func:

Буфер трафарета: видимость пикселей true S x,y =1 для грани F - Запись пикселя Да Нет F F S x,y == 1 S x,y == 0 glStencilFunc(GL_KEEP, GL_KEEP, GL_REPLACE); glStencilOp(GL_ALWAYS, 1,1);

Буфер трафарета: обработка пикселей S x,y ==1? - - Запись пикселя Да Нет - F F S x,y == 1 S x,y == 0 glStencilOp(GL_EQUAL, 1,1); glStencilFunc(GL_KEEP, GL_KEEP, GL_KEEP);

Буфер трафарета: тени и отражения Отбрасывание тени на плоскую грань ПравильноНеправильно Отражения и порталы

Буфер трафарета: теневые объемы Строим теневой объем Рисуем затеняемый объект со включенным Z-буфером Z Y … glEnable(GL_DEPTH_TEST); glCallList(object); …

Теневые объемы (2/3). Выводим грани теневого объема в произвольном порядке. Z Y … glStencilFunc(GL_ALWAYS,1,1); glStencilOp(GL_KEEP, GL_KEEP, GL_INVERT); glDisable(GL_CULL_FACE); glColorMask(0,0,0,0); glDepthMask(0); glCallList(shadow); glColorMask(1,1,1,1); glDepthMask(1); …

Теневые объемы (3/3). Рисуем затененную часть объекта Z Y … glStencilFunc(GL_EQUAL,1,1); glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); … glCallList(object); … glDisable(GL_STENCIL_TEST); ……

Системы частиц Система частиц – система из большого количества объектов с достаточно простым поведением Для рисования каждой частицы можно применять текстурированный четырехугольник с полупрозрачностью. Billboard – объект, который всегда повернут к наблюдателю одной стороной