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