Transparencias

Anuncio
Computación Gráfica
Unidad II b: Métodos en el Espacio de la Imagen
Docentes:
Nestor Calvo
Pablo Novara
Walter Sotil
2011
Image Precision
Image Precision
Raster
Gráfico
Fragmentos
rasterizados
Conceptos:
•Fragmento
•Píxel
Model Precision
Vector
Geométrico
Espacio de la Imagen
2
Un bit por píxel (y encima pocos píxeles)
•Bitmap
Espacio de la Imagen
3
Dithering con un bit por píxel
Espacio de la Imagen
4
Ocho bits por píxel
256 Colores
256 Tonos
Espacio de la Imagen
5
Color buffer
R0, G0, B0, R1, G1, B1, R2, G2, B2, R3, G3, B3, ………..
H
Píxel {x,y}
W
Bitplanes
(profundidad)
Espacio de la Imagen
6
Clipping Planes: far-plane y near-plane
Espacio de la Imagen
7
Depth buffer ó z-buffer
far
zfar
z del fragmento más
cercano al ojo
near
Inicializar el z-buffer con el z del far-plane (depth(x,y)=zfar)
Para cada primitiva dentro del espacio visual:
Rasterizar calculando z (Bresenham 3D)
Si z < depth(x,y)
Actualizar el color-buffer (pintar: color(x,y)=RGBA)
Actualizar el z-buffer (depth(x,y)=z)
Espacio de la Imagen
8
z-buffer: z-fighting
R0, G0, B0, A0, Z0, R1, G1, B1, A1, Z1, R2, G2, B2, A2, Z2, R3, G3, B3, ………..
H
Píxel {x,y}
DB Depth Bitplanes
W
1
0
Espacio de la Imagen
9
z-buffer: Antialiasing
Grokking The Gimp
http://www.linuxtopia.org/online_books/graphics_tools/gimp_advanced_guide/gimp_guide_node36_007.html
Espacio de la Imagen
10
z-buffer: Transparencias Múltiples
Espacio de la Imagen
11
z-buffer: Oclusiones múltiples en escenas complejas
Escenas complejas:
Requieren rasterizar
muchas primitivas
Espacio de la Imagen
12
Backface Culling (Descarte de Caras Traseras)
glCullFace(GL_FRONT or GL_BACK)
glFrontFace(GL_CW or GL_CCW)
D
C
B
A
Espacio de la Imagen
13
Frame-buffer
glutInitDisplayMode(modo)
Color buffers:
front-left, front-right,
back-left, back-right,
auxiliary
Depth buffer
Stencil buffer
Accumulation buffer
Memoria de
Video
Color buffer
Depth buffer
Stencil buffer
Accumulation buffer
Espacio de la Imagen
14
Aplicaciones: Lectura de color y z
punto unproject(int xc, int yc){
GLint viewport[4];
GLdouble modelview[16],projection[16];
glGetIntegerv(GL_VIEWPORT,viewport);
glGetDoublev(GL_MODELVIEW_MATRIX,modelview);
glGetDoublev(GL_PROJECTION_MATRIX,projection);
GLfloat zc;
glReadPixels(xc,yc,1,1,GL_DEPTH_COMPONENT,GL_FLOAT,&zc);
punto pt;
gluUnProject(
xc,yc,zc,
modelview,projection,viewport,
&pt[0],&pt[1],&pt[2]
);
return pt;
}
Espacio de la Imagen
15
Aplicaciones: Siluetas (NPR)
Espacio de la Imagen
16
Aplicaciones: Líneas ocultas
glColorMask(R,G,B,A)
glDepthFunc(comparador)
Espacio de la Imagen
17
Aplicaciones: Sombras duras
Espacio de la Imagen
18
Aplicaciones: Sombras blandas
Espacio de la Imagen
19
Aplicaciones: Reflejos, Motion blur, Depth of field
Espacio de la Imagen
20
Tests sobre Fragmentos
gl_Enable()
gl_Disable()
(GL_XXX_TEST)
Ownership
Scissor Comparadores:
Alpha
GL_NEVER
Stencil GL_LESS
GL_EQUAL
Depth
GL_LEQUAL
gl_Xxx_Func(
GL_GREATER
GL_NOTEQUAL
GL_GEQUAL
GL_ALWAYS
)
GL_ALWAYS es default para
Alpha y GL_LESS para Depth
Espacio de la Imagen
21
Tests sobre Fragmentos: Alpha Test
glAlphaFunc(comparador,int)
Espacio de la Imagen
22
Tests sobre Fragmentos: Stencil Test
Espacio de la Imagen
23
Escritura en el Stencil-Buffer
Stencil Ref.
Stencil(x,y)
Fragment_z(x,y)
Depth(x,y)
Stencil Value Mask
Depth Test
Stencil Test
glStencilFunc( )
pass
glDepthFunc( )
zpass
zfail
fail
glStencilOp(fail,zfail,zpass)
Stencil Write Mask
Stencil(x,y)
Fragment_z(x,y)
Depth Mask
Depth(x,y)
Espacio de la Imagen
24
Alteración de Fragmentos: Blending
glBlendFunc(Fs,Fd)
D = Fs S + Fd D
Constant
Relevant Factor
Computed Blend Factor
GL_ZERO
source or destination
(0, 0, 0, 0)
GL_ONE
source or destination
(1, 1, 1, 1)
GL_DST_COLOR
source
(Rd, Gd, Bd, Ad)
GL_SRC_COLOR
destination
(Rs, Gs, Bs, As)
GL_ONE_MINUS_DST_COLOR
source
(1, 1, 1, 1)-(Rd, Gd, Bd, Ad)
GL_ONE_MINUS_SRC_COLOR
destination
(1, 1, 1, 1)-(Rs, Gs, Bs, As)
GL_SRC_ALPHA
source or destination
(As, As, As, As)
GL_ONE_MINUS_SRC_ALPHA
source or destination
(1, 1, 1, 1)-(As, As, As, As)
GL_DST_ALPHA
source or destination
(Ad, Ad, Ad, Ad)
GL_ONE_MINUS_DST_ALPHA
source or destination
(1, 1, 1, 1)-(Ad, Ad, Ad, Ad)
GL_SRC_ALPHA_SATURATE
source
(f, f, f, 1); f=min(As, 1-Ad)
Espacio de la Imagen
25
Blending: Transparencias
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
D = As S + (1-As) D
S: color del fragmento entrante
D: píxel almacenado en el color buffer
D: resultado que será almacenado en el píxel
As: alpha del píxel entrante
Espacio de la Imagen
26
Alteración de Fragmentos: Logic Operation
glLogicOp(op);
D = S op D
Se lee el píxel destino antes de escribir el fuente
Espacio de la Imagen
27
Alteración de Fragmentos: Logic Operation
glLogicOp(op);
Parameter
D = S op D
Operation
Parameter
Operation
GL_CLEAR
0
GL_AND
s&d
GL_COPY
s
GL_OR
s|d
GL_NOOP
d
GL_NAND
~(s&d)
GL_SET
1
GL_NOR
~(s&d)
GL_COPY_INVERTED
~s
GL_XOR
s^d
GL_INVERT
~d
GL_EQUIV
~(s^d)
GL_AND_REVERSE
s&~d
GL_AND_INVERTED
~s&d
GL_OR_REVERSE
s|~d
GL_OR_INVERTED
~s|d
Espacio de la Imagen
28
Fin
• Deben saber:
• Conceptos:
o
o
o
o
o
Image Precision vs. Model Precision.
Depth-Buffer (todo, incl. Bresenham 3D)
Buffers: Usos
Tests: Usos (Técnicas Multipaso)
Blending y Logic Operation: Usos
• Práctica: ver notas y consignas
• Bibliografía:
• Red-Book: caps 5, 6, 8, 10 y 14 (Partes)
o
o
o
o
o
5: A Hidden-Surface Removal Survival Kit
6: Blending, Antialiasing, Polygon Offset
8: Lo que quieran saber sobre imágenes
10: Framebuffer (todo)
14: Usos alternativos
El material extra es para curiosear, ver otras fuentes o una punta para aprender más, no es
necesario estudiarlo.
Las transparencias no son material de estudio.
Espacio de la Imagen
29
Descargar