close

Вход

Забыли?

вход по аккаунту

?

ppt

код для вставкиСкачать
Фильтрация текстур.
Пиксельные операции.
Лекция 11
Астана 2004
Фильтрация текстур
s 2 u,
n
t2 v
m
Выборка ближайшего текселя GL_NEAREST:
i s , j t i, j
Линейная комбинация 4-x соседних пикселей GL_LINEAR:
frac( s 1 / 2),
i0 s , j0 t ,
frac(t 1 / 2)
i1 i0 1, j1 j0 1
(1 )(1 ) 00 (1 ) 10 (1 ) 01 11
Фильтрация текстур: mipmapping
2
2
s t max ,
x x 2
s t y y 2
0 1 увеличение текстуры
1 масштаб 1:1
1 уменьшение текстуры
log 2 0 увеличение текстуры
0 масштаб 1:1
0 уменьшение текстуры в 2 раз
Фильтрация текстур: mipmapping. Часть 2
256x256, 0
64x64, 2
16x16, 4
Трилинейная фильтрация GL_LINEAR_MIPMAP_LINEAR
0 d 1 d , d целое
frac( )
d 1 (1 ) d
Анизотропная фильтрация
Экран
15
i x y , ( xi , yi ) i 0
i
i
Расширение “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();
Текстура и освещение
+
RGBAf из модуля T&L
=
RGBAt текстуры
RGBAс результат
Замещение GL_REPLACE
Rc Rt , Gc Gt , Bc Bt , Ac At
Модулирование GL_MODULATE (по умолчанию)
Demo
Rc R f Rt , Gc G f Gt , Bc B f Bt , Ac A f At
Смешение GL_DECAL,GL_BLEND
Rc R f (1 At ) Rt At , Ac A f
Генерация текстурных координат
Линейная зависимость
u a11Px a12 Py a13 Pz a14 Pw
v a21Px a22 Py a23 Pz a24 Pw
Environment mapping - эффект отражающей поверхности
(u,v)
r
r u 2(n, n )h
T
m 2 rx ry (rz 1)
2
n
P’
h
2
u 1 / 2 rx / m
v 1 / 2 ry / m
2
Генерация текстурных координат.
Продолжение
Включаем автоматическую генерацию текстурных
координат (для первыхдвух координат)
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);
Кубические карты среды.
R
r
P’
n
е
Точка R определяет одну из шести текстур и текстурные
координаты.
Расширение “GL_EXT_cube_map”
Преобразование текстурных координат
u' u u ' / q' v'
v
T v' / q ' p '
p
p ' / q '
q
'
q
Работаем с матрицей T точно также
как с M и P.
glMatrixMode(GL_TEXTURE);
glLoadIdentity();
glMultMatrix(…);
Позволяет существенно изменять вид объекта не изменяя
геометрии
Пиксельные операции
T&L
Rasterization
Pixel Ops
{x, y, z, R, G, B, A}
Буфер
кадра
Буфер
глубины
Буфер
аккумулятора
Буфер
трафарета
Пиксельные операции.
Продолжение.
xf , yf ,zf
RGBA
Scissor test
Alpha test
Depth test
Stencil test
f
Blending
Frame buffer:
RGBAij
Z Buffer:
Zij
Stencil Buffer:
Sij
Scissor & Alpha test
x min x f x max
y min y f y max
Да
A f A0 ?
Да
Нет
Не записывать пиксел
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);
Смешение цветов
Cb {Rb , Gb , Bb , Ab },
C f {R f , G f , B f , A f },
Cr D Cb S C f .
Команды OpenGL:
glEnable(GL_ENABLE);
glDisable(GL_DISABLE);
glBlendFunc(sfactor,dfactor)
glBlendFunc(GL_SRC_ALPHA,GL_ONE_MINUS_SRC_ALPHA):
S { A f , Af , A f , A f }, D {1 A f ,1 A f ,1 A f ,1 A f }
glBlendFunc(GL_ONE_MINUS_SRC_ALPHA,GL_SRC_ALPHA):
S {1 A f ,1 A f ,1 A f ,1 A f }, D { A f , A f , A f , A f }
glBlendFunc(GL_ZERO,GL_SRC_COLOR):
S {0,0,0,0}, D {R f , G f , B f , A f }
Полупрозрачные объекты
Полупрозрачная грань - грань через часть пикселов которой
видно лежащие за ней грани. Ключевые команды glAlphaFunc и
glBlendFunc
Полупрозрачные грани необходимо выводить в порядке
back-to-front. Применение метода Z-буфера ведет к
визуальным артефактам -“глюкам” :)
Для выпуклых объектов можно выводить сначала нелицевые
грани, а затем - лицевые.
Объекты можно выводить методом художника - сортировать
по убыванию координат Z центров.
Карты освещенности (lightmaps)
n 1
c em am as atti spoti (am ai d m d i (n l ) sm si (n h) )
hm
i 0
Карта освещенности: RGBAij , 0 i 4, 0 j 4
Мультитекстурирование: Rr R1R2 , Gr G1G2 , Br B1B2
(i,j)
Возможен предварительный расчет
освещения
Экономия количества примитивов
при динамическом освещении
Экономия текстур при статическом
освещении
Мультитекстурирование
Lighting
F(RGBAc,RGBA0)
F(RGBAf,RGBA1)
Texture 0
Texture 1
Объединение текстуры объекта и текстуры среды
RGBAr 1
( RGBA0 RGBA1 )
2
Расширение GL_ARB_multitexture
Буфер трафарета и буфер глубины
func:
( S x f y f & mask ) Нет
( ref & mask ) ?
Да
Z xf yf Z f ?
zpassOp:
Да
Нет
failOp:
Изменение Sx,y
zfailOp:
Изменение Sx,y
Не записывать
пиксел
Не записывать
пиксел
void glStencilOp(GLenum failOp,
GLenum zfailOp,
Изменение Sx,y
GLenum zpassOp);
void glStencilFunc(GLenum func,
GLint ref,
GLuint mask);
RGBAx,y=F(RGBAx,y,RGBAf)
Буфер трафарета: видимость пикселей
glStencilOp(GL_ALWAYS,
1,1);
true
F
Да
glStencilFunc(GL_KEEP,
GL_KEEP,
GL_REPLACE);
Z x, y Z f ?
Sx,y== 1
Sx,y== 0
F
Нет
Да
Sx,y=1 для грани F
Запись пикселя
-
Буфер трафарета: обработка пикселей
Sx,y== 1
Sx,y== 0
Sx,y==1?
Да
F
Z x, y Z f ?
Да
F
Запись пикселя
Нет
Нет
-
-
glStencilFunc(GL_KEEP,
GL_KEEP,
GL_KEEP);
glStencilOp(GL_EQUAL,
1,1);
Буфер трафарета: тени и отражения
Отбрасывание тени на плоскую грань
Правильно
Отражения и порталы
Неправильно
Буфер трафарета: теневые объемы
Строим теневой объем
Рисуем затеняемый объект со включенным Z-буфером
Y
…
glEnable(GL_DEPTH_TEST);
glCallList(object);
…
Z
Теневые объемы (2/3).
Выводим грани теневого объема в произвольном порядке.
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);
…
Z
Теневые объемы (3/3).
Рисуем затененную часть объекта
Y
…
glStencilFunc(GL_EQUAL,1,1);
glStencilOp(GL_KEEP,
GL_KEEP,
GL_KEEP);
…
glCallList(object);
…
glDisable(GL_STENCIL_TEST);
……
Z
Системы частиц
Система частиц – система из большого количества объектов с
достаточно простым поведением
Для рисования каждой частицы можно применять
текстурированный четырехугольник с полупрозрачностью.
Billboard – объект, который всегда повернут к наблюдателю
одной стороной
cg@cs.msu.su
Документ
Категория
Презентации по информатике
Просмотров
3
Размер файла
850 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа