Buffers, Compositing and Blending Week 8 David Breen Department of Computer Science Drexel University Based on material from Ed Angel, University of New.

Slides:



Advertisements
Similar presentations
Compositing and Blending Ed Angel Professor Emeritus of Computer Science University of New Mexico 1 E. Angel and D. Shreiner: Interactive Computer Graphics.
Advertisements

Hank Childs, University of Oregon Nov. 25th, 2014 CIS 441/541: Introduction to Computer Graphics Lecture 15: animation, transparency.
CS 352: Computer Graphics Chapter 7: The Rendering Pipeline.
Graphics Pipeline.
Computer Graphic Creator: Mohsen Asghari Session 2 Fall 2014.
Compositing and Blending Mohan Sridharan Based on slides created by Edward Angel 1 CS4395: Computer Graphics.
Compositing and Blending - Chapter 8 modified by Ray Wisman Ed Angel Professor of Computer Science, Electrical and Computer Engineering,
Image Compositing Angel 8.11 Angel: Interactive Computer Graphics5E © Addison-Wesley
Objectives Introduce OpenGL buffers and read/write Introduce OpenGL buffers and read/write Introduce texture mapping Introduce texture mapping Introduce.
Chapter 6. More on Color and Material Presented by Garrett Yeh.
Buffers Mohan Sridharan Based on slides created by Edward Angel 1 CS4395: Computer Graphics.
Chapter 6: Vertices to Fragments Part 2 E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley Mohan Sridharan Based on Slides.
Vertices and Fragments I CS4395: Computer Graphics 1 Mohan Sridharan Based on slides created by Edward Angel.
Buffers Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
Raster Displays Images are composed of arrays of pixels displayed on a raster device. Two main ways to create images: –Scan and digitize an existing image.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Models and Architectures Ed Angel Professor of Computer Science, Electrical and Computer.
7/2/2006Based on: Angel (4th Edition) & Akeine-Möller & Haines (2nd Edition)1 CSC345: Advanced Graphics & Virtual Environments Lecture 4: Visual Appearance.
OpenGL Pixel Operations, Bitmaps, Fonts and Images The Current Raster Position Current raster position: A position in window coordinates where the next.
09/18/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Bump Mapping Multi-pass algorithms.
CSE (Notre Dame) Computer Graphics Lecture 16 A Simple Draw Image Example More Texture Mapping Simple OpenGL Image Library (SOIL) Transparency &
Computer Graphics Mirror and Shadows
CS 638, Fall 2001 Today Light Mapping (Continued) Bump Mapping with Multi-Texturing Multi-Pass Rendering.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
Tools for Raster Displays CVGLab Goals of the Chapter To describe pixmaps and useful operations on them. To develop tools for copying, scaling, and rotating.
Texture Mapping. Scope Buffers Buffers Various of graphics image Various of graphics image Texture mapping Texture mapping.
Lecture 12 Blending, Anti-aliasing, Fog, Display Lists.
2002 by Jim X. Chen: 1 So far, we only concerned with the rendering of geometric data. Two other important classes of data:
Advanced Computer Graphics Depth & Stencil Buffers / Rendering to Textures CO2409 Computer Graphics Week 19.
Graphics Systems and OpenGL. Business of Generating Images Images are made up of pixels.
CSC 461: Lecture 3 1 CSC461 Lecture 3: Models and Architectures  Objectives –Learn the basic design of a graphics system –Introduce pipeline architecture.
CS 638, Fall 2001 Multi-Pass Rendering The pipeline takes one triangle at a time, so only local information, and pre-computed maps, are available Multi-Pass.
Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
Chapter 8: Discrete Techniques Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
1 Chapter 7 Discrete Techniques. 2 Buffer Define a buffer by its spatial resolution (n x m) and its depth k, the number of bits/pixel pixel.
Discrete Techniques Chapter 7 Begun February 22, 2005 Finished April 26, 2005.
Computer Graphics Chapter 6 Andreas Savva. 2 Interactive Graphics Graphics provides one of the most natural means of communicating with a computer. Interactive.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
111/17/ :24 UML Solution Involves Selection of Discrete Representation Values.
Implementation II Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
09/16/03CS679 - Fall Copyright Univ. of Wisconsin Last Time Environment mapping Light mapping Project Goals for Stage 1.
Compositing and Blending
Advanced Computer Graphics Spring 2014 K. H. Ko School of Mechatronics Gwangju Institute of Science and Technology.
Review on Graphics Basics. Outline Polygon rendering pipeline Affine transformations Projective transformations Lighting and shading From vertices to.
Discrete Techniques Chapter 7.
UniS CS297 Graphics with Java and OpenGL Blending.
OpenGL Special Effects Jian-Liang Lin 2002 Blending: Alpha Channel Alpha value can be specify by glColor* When blending is enabled, the alpha value is.
Computing & Information Sciences Kansas State University Lecture 12 of 42CIS 636/736: (Introduction to) Computer Graphics CIS 636/736 Computer Graphics.
Buffers Computer Graphics I, Fall 2010.
11/24/ :45 Graphics II Shadow Maps Reflections Session 5.
Computer Graphics I, Fall 2010 Implementation II.
OpenGL API 2D Graphic Primitives Angel Angel: Interactive Computer Graphics5E © Addison-Wesley
Buffers. 2 Objectives Introduce additional OpenGL buffers Learn to read and write buffers Learn to use blending.
Compositing and Blending Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
1 E. Angel and D. Shreiner: Interactive Computer Graphics 6E © Addison-Wesley 2012 Models and Architectures 靜宜大學 資訊工程系 蔡奇偉 副教授 2012.
Tan-Chi Ho, CGGM Lab., CSIE of NCTU Pixel Operations and Buffers.
Computer Graphics I, Fall 2008 Compositing and Blending.
Buffers Ed Angel Professor Emeritus of Computer Science
Discrete Techniques.
Introduction to Computer Graphics with WebGL
Discrete Techniques Chapter 8.
The Graphics Rendering Pipeline
Discrete Techniques Chapter 8.
CSc4820/6820 Computer Graphics Algorithms Ying Zhu Georgia State University Fog and Transparency.
Introduction to Computer Graphics with WebGL
Angel: Interactive Computer Graphics5E © Addison-Wesley 2009
Implementation II Ed Angel Professor Emeritus of Computer Science
Computer Graphics Buffers
Buffers Ed Angel Professor Emeritus of Computer Science
Implementation II Ed Angel Professor Emeritus of Computer Science
Presentation transcript:

Buffers, Compositing and Blending Week 8 David Breen Department of Computer Science Drexel University Based on material from Ed Angel, University of New Mexico Han-Wei Shen, Ohio State University David Blythe, Silicon Graphics & Tom McReynolds, Gigapixel CS 432/680 INTERACTIVE COMPUTER GRAPHICS

Angel: Interactive Computer Graphics 3E © Addison-Wesley Objectives Introduce additional OpenGL buffers Learn to read and write buffers Learn to use blending Learn depth-of-field and reflection effects

Pixel and Geometry Pipelines Parallel pipelines (Geometry & Pixel) come together in the Rasterization stage Angel: Interactive Computer Graphics 3E © Addison-Wesley

4 Buffer Define a buffer by its spatial resolution ( n x m ) and its depth k, the number of bits/pixel pixel

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Frame Buffer

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Buffers Color buffers can be displayed –Front –Back –Auxiliary –Overlay Depth Accumulation –High resolution buffer Stencil –Holds masks

Angel: Interactive Computer Graphics 3E © Addison-Wesley Writing in Buffers Conceptually, we can consider all of memory as a large two-dimensional array of pixels We read and write rectangular block of pixels –Bit block transfer (bitblt) operations The frame buffer is part of this memory frame buffer (destination) writing into frame buffer source memory

Angel: Interactive Computer Graphics 3E © Addison-Wesley The Pixel Pipeline OpenGL has a separate pipeline for pixels –Writing pixels involves Moving pixels from processor memory to the frame buffer Unpacking (Format conversions, swapping & alignment) Transfer ops, Map Lookups, Tests –Reading pixels Packing (Format conversion, swapping & alignment)

Angel: Interactive Computer Graphics 3E © Addison-Wesley Pixel Storage Modes Deal with byte-ordering conventions Memory alignment glPixelStore[if](GLenum pname, TYPE param); pname: GL_UNPACK_SWAP_BYTES, GL_PACK_SWAP_BYTES, GL_UNPACK_LSB_FIRST, GL_PACK_LSB_FIRST, GL_UNPACK_ROW_LENGTH, GL_PACK_ROW_LENGTH, GL_UNPACK_SKIP_ROWS, GL_PACK_SKIP_ROWS, GL_UNPACK_ALIGNMENT, GL_PACK_ALIGNMENT, GL_UNPACK_ALIGNMENT

Angel: Interactive Computer Graphics 3E © Addison-Wesley Pixel Transfer Operations Color Scale & Bias Color Index Shift & Offset Convolution Matrix multiply glPixelTransferf(GL_RED_SCALE, s); glPixelTransferf(GL_BLUE_BIAS, b);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Pixel Mapping Operations Color components and color & stencil indices can be modified via a table look-up glPixelMap[ui us f]v(Glenum map, Glint size, TYPE *array); map - GL_PIXEL_MAP_*_TO_* I, S, R, G, B, A

Angel: Interactive Computer Graphics 3E © Addison-Wesley Pixel Tests Scissor glScissor() –Only draw in a rectangular portion of screen Alpha glAlphaFunc() –Draw based on alpha value Stencil glStencilFunc(), glStencilOp() –Draw based on stencil value Depth glDepthFunc(), –Draw based on depth value

Angel: Interactive Computer Graphics 3E © Addison-Wesley Writing Model Read destination pixel before writing source glLogicOp(GLenum op)

Logical Pixel Operations Angel: Interactive Computer Graphics 3E © Addison-Wesley

Angel: Interactive Computer Graphics 3E © Addison-Wesley Writing Modes Source and destination bits are combined bitwise 16 possible functions (one per column in table) replace OR XOR AND NOT( s )

Angel: Interactive Computer Graphics 3E © Addison-Wesley XOR mode Applying twice returns bit back to original value XOR is especially useful for swapping blocks of memory such as menus that are stored off screen If S represents screen and M represents a menu the sequence S  S 0 M  S  M S  S  M swaps the S and M

Angel: Interactive Computer Graphics 3E © Addison-Wesley Raster Position OpenGL maintains a raster position as part of the state Set by glRasterPos*() –glRasterPos3f(x, y, z); The raster position is a geometric entity (like a vertex) –Passes through geometric pipeline –Eventually yields a 2D position in screen coordinates –This position in the frame buffer is where the next raster primitive is drawn

Angel: Interactive Computer Graphics 3E © Addison-Wesley Window Position In OpenGL 1.4 glWindowPos*() was defined Allows you to specify current raster position in window coordinates

Angel: Interactive Computer Graphics 3E © Addison-Wesley Buffer Selection OpenGL can draw into or read from any of the color buffers (front, back, auxiliary) Default to the back buffer Change with glDrawBuffer and glReadBuffer Note that format of the pixels in the frame buffer is different from that of processor memory and these two types of memory reside in different places –Need packing and unpacking –Drawing and reading can be slow

Angel: Interactive Computer Graphics 3E © Addison-Wesley Bitmaps OpenGL treats 1-bit pixels (bitmaps) differently than multi-bit pixels (pixelmaps) Bitmaps are masks which determine if the corresponding pixel in the frame buffer is drawn with the present raster color –0  color unchanged –1  color changed based on writing mode Bitmaps are useful for raster text –GLUT_BIT_MAP_8_BY_13

Angel: Interactive Computer Graphics 3E © Addison-Wesley Raster Color Same as drawing color set by glColor*() Fixed by last call to glRasterPos*() Geometry drawn in blue Ones in bitmap use a drawing color of red glColor3f(1.0, 0.0, 0.0); glRasterPos3f(x, y, z); glColor3f(0.0, 0.0, 1.0); glBitmap(……. glBegin(GL_LINES); glVertex3f(…..)

Angel: Interactive Computer Graphics 3E © Addison-Wesley Drawing Bitmaps glBitmap(width, height, x0, y0, xi, yi, bitmap) first raster position second raster position offset from raster position increments in raster position after bitmap drawn

Angel: Interactive Computer Graphics 3E © Addison-Wesley Example: Checker Board GLubyte wb[2] = {0 x 00, 0 x ff}; GLubyte check[4096]; int i, j; for(i=0; i<64; i++) for (j=0; j<64, j++) check[i*8+j] = wb[(i/8+j/8)%2]; glBitmap( 64, 64, 0.0, 0.0, 0.0, 0.0, check);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Pixel Maps OpenGL works with rectangular arrays of pixels called pixel maps or images Pixels are in one byte chunks –Luminance (gray scale) images 1 byte/pixel –RGB 3 bytes/pixel Three functions –Draw pixels: processor memory to frame buffer –Read pixels: frame buffer to processor memory –Copy pixels: frame buffer to frame buffer

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Pixel Functions glReadPixels(x,y,width,height,format,type,myimage) start pixel in frame buffer size type of image type of pixels pointer to processor memory GLubyte myimage[512][512][3]; glReadPixels(0,0, 512, 512, GL_RGB, GL_UNSIGNED_BYTE, myimage); glDrawPixels(width,height,format,type,myimage) starts at current raster position

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Pixel Functions glReadPixels(x,y,width,height,format,type,myimage) start pixel in frame buffer size type of image type of pixels pointer to processor memory GLubyte myimage[512][512][3]; glReadPixels(0,0, 512, 512, GL_RGB, GL_UNSIGNED_BYTE, myimage); glDrawPixels(width,height,format,type,myimage) starts at current raster position

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Pixel Functions glReadPixels(x,y,width,height,format,type,myimage) start pixel in frame buffer size type of image type of pixels pointer to processor memory GLubyte myimage[786432]; glReadPixels(0,0, 512, 512, GL_RGB, GL_UNSIGNED_BYTE, myimage); glDrawPixels(width,height,format,type,myimage) starts at current raster position

Formats & Types GL_RGB GL_RGBA GL_RED GL_GREEN GL_BLUE GL_ALPHA GL_DEPTH_COMPONENT GL_LUMINANCE GL_LUMINANCE_ALPHA GL_COLOR_INDEX GL_STENCIL_INDEX GL_UNSIGNED_BYTE GL_BYTE GL_BITMAP GL_UNSIGNED_SHORT GL_SHORT GL_UNSIGNED_INT GL_INT GL_FLOAT GL_UNSIGNED_BYTE_3_3_2 GL_UNSIGNED_INT_8_8_8_8 etc. Angel: Interactive Computer Graphics 3E © Addison-Wesley

Angel: Interactive Computer Graphics 3E © Addison-Wesley Image Formats We often work with images in a standard format (JPEG, TIFF, GIF) How do we read/write such images with OpenGL? No support in OpenGL –OpenGL knows nothing of image formats –Some code available on Web –Can write readers/writers for some simple formats in OpenGL

Angel: Interactive Computer Graphics 3E © Addison-Wesley Displaying a PPM Image PPM is a very simple format Each image file consists of a header followed by all the pixel data Header P3 # comment 1 # comment 2. #comment n rows columns maxvalue pixels

Angel: Interactive Computer Graphics 3E © Addison-Wesley Reading the Header FILE *fd; int k, nm; char c; int i; char b[100]; float s; int red, green, blue; printf("enter file name\n"); scanf("%s", b); fd = fopen(b, "r"); fscanf(fd,"%[^\n] ",b); if(b[0]!='P'|| b[1] != '3'){ printf("%s is not a PPM file!\n", b); exit(0); } printf("%s is a PPM file\n",b); check for “P3” in first line

Angel: Interactive Computer Graphics 3E © Addison-Wesley Reading the Header (cont) fscanf(fd, "%c",&c); while(c == '#') { fscanf(fd, "%[^\n] ", b); printf("%s\n",b); fscanf(fd, "%c",&c); } ungetc(c,fd); skip over comments by looking for # in first column

Angel: Interactive Computer Graphics 3E © Addison-Wesley Reading the Data fscanf(fd, "%d %d %d", &n, &m, &k); printf("%d rows %d columns max value= %d\n",n,m,k); nm = n*m; image=malloc(3*sizeof(GLuint)*nm); s=255./k; for(i=0;i<nm;i++) { fscanf(fd,"%d %d %d",&red, &green, &blue ); image[3*nm-3*i-3]=red; image[3*nm-3*i-2]=green; image[3*nm-3*i-1]=blue; } scale factor

Angel: Interactive Computer Graphics 3E © Addison-Wesley Scaling the Image Data We can scale the image in the pipeline glPixelTransferf(GL_RED_SCALE, s); glPixelTransferf(GL_GREEN_SCALE, s); glPixelTransferf(GL_BLUE_SCALE, s); We may have to swap bytes when we go from processor memory to the frame buffer depending on the processor. If so we need can use glPixelStorei(GL_UNPACK_SWAP_BYTES,GL_TRUE);

Angel: Interactive Computer Graphics 3E © Addison-Wesley The display callback void display() { glClear(GL_COLOR_BUFFER_BIT); glRasterPos2i(0,0); glDrawPixels(n,m,GL_RGB, GL_UNSIGNED_INT, image); glFlush(); }

Compositing and Blending

Angel: Interactive Computer Graphics 3E © Addison-Wesley Objectives Learn to use the A component in RGBA color for –Blending for translucent surfaces –Compositing images –Antialiasing

Angel: Interactive Computer Graphics 3E © Addison-Wesley Opacity and Transparency Opaque surfaces permit no light to pass through Transparent surfaces permit all light to pass Translucent surfaces pass some light translucency = 1 – opacity (  ) opaque surface  =1

Angel: Interactive Computer Graphics 3E © Addison-Wesley Physical Models Dealing with translucency in a physically correct manner is difficult due to –the complexity of the internal interactions of light and matter –Using a pipeline renderer –Revert to writing model

Angel: Interactive Computer Graphics 3E © Addison-Wesley Writing Model Use A component of RGBA (or RGB  ) color to store opacity During rendering we can expand our writing model to use RGBA values Color Buffer destination component blend destination blending factor source blending factor source component

Angel: Interactive Computer Graphics 3E © Addison-Wesley Blending Equation We can define source and destination blending factors for each component b = [b r, b g, b b, b  ] c = [c r, c g, c b, c  ] source and destination colors s = [s r, s g, s b, s  ] d = [d r, d g, d b, d  ] Blend as pixel = [b r s r + c r d r, b g s g + c g d g, b b s b + c b d b, b  s  + c  d  ]

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Blending and Compositing Must enable blending and pick source and destination factors glEnable(GL_BLEND) glBlendFunc(source_factor, destination_factor) Only certain factors supported –GL_ZERO, GL_ONE –GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA –GL_DST_ALPHA, GL_ONE_MINUS_DST_ALPHA –See Redbook for complete list

Angel: Interactive Computer Graphics 3E © Addison-Wesley Example Suppose that we start with the opaque background color (R 0,G 0,B 0,1) –This color becomes the initial destination color We now want to blend in a translucent polygon with color (R 1,G 1,B 1,  1 ) Select GL_SRC_ALPHA and GL_ONE_MINUS_SRC_ALPHA as the source and destination blending factors R ’ 1 =  1 R 1 +(1-  1 ) R 0, …… Note this formula is correct if polygon is either opaque or transparent

Angel: Interactive Computer Graphics 3E © Addison-Wesley Clamping and Accuracy All the components (RGBA) are clamped and stay in the range (0,1) However, in a typical system, RGBA values are only stored to 8 bits –Can easily loose accuracy if we add many components together –Example: add together n images Divide all color components by n to avoid clamping Blend with source factor = 1, destination factor = 1 But division by n loses bits

Angel: Interactive Computer Graphics 3E © Addison-Wesley Order Dependency Is this image correct? –Probably not –Polygons are rendered in the order they pass down the pipeline –Blending functions are order dependent

Angel: Interactive Computer Graphics 3E © Addison-Wesley Opaque and Translucent Polygons Suppose that we have a group of polygons some of which are opaque and some translucent How do we use hidden-surface removal? Opaque polygons block all polygons behind them and affect the depth buffer Translucent polygons should not affect depth buffer –Render with glDepthMask(GL_FALSE) which makes depth buffer read-only Sort polygons first to remove order dependency

Angel: Interactive Computer Graphics 3E © Addison-Wesley Fog We can composite with a fixed color and have the blending factors depend on depth –Simulates a fog effect Blend source color C s and fog color C f by C s ’=f C s + (1-f) C f f is the fog factor –Exponential –Gaussian –Linear (depth cueing)

Angel: Interactive Computer Graphics 3E © Addison-Wesley Fog Functions

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Fog Functions GLfloat fcolor[4] = {……}: glEnable(GL_FOG); // fog function glFogf(GL_FOG_MODE, GL_EXP); // fog function parameter glFogf(GL_FOG_DENSITY, 0.5); glFogv(GL_FOG, fcolor); // near distance to start fog glFogf(GL_FOG_START, 1.5); // far distance to stop fog glFogf(GL_FOG_END, 10.5);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Fog Effect

Angel: Interactive Computer Graphics 3E © Addison-Wesley Line Aliasing Ideal raster line is one pixel wide All line segments, other than vertical and horizontal segments, partially cover pixels Simple algorithms color only whole pixels Lead to the “jaggies” or aliasing Similar issue for polygons

Angel: Interactive Computer Graphics 3E © Addison-Wesley Antialiasing by Area Averaging Pixel shade is proportional to percentage of pixel covered by ideal line

Angel: Interactive Computer Graphics 3E © Addison-Wesley Antialiasing Can try to color a pixel by adding a fraction of its color to the frame buffer –Fraction depends on percentage of pixel covered by fragment –Fraction depends on whether there is overlap no overlapoverlap

Angel: Interactive Computer Graphics 3E © Addison-Wesley Area Averaging Use average area  1 +  2 -  1  2 as blending factor

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Antialiasing Can enable separately for points, lines, or polygons Pixels along edges are assigned fractional alpha values glEnable(GL_POINT_SMOOTH); glEnable(GL_LINE_SMOOTH); glEnable(GL_POLYGON_SMOOTH); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Accumulation Buffer Compositing and blending are limited by resolution of the frame buffer –Typically 8 bits per color component The accumulation buffer is a high resolution buffer (16 or more bits per component) that avoids loss of precision from multiple ops Write into it or read from it with a scale factor Slower than direct compositing into the frame buffer glAccum(Glenum operation, Glfloat value);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Specifying Drawing Buffer(s) glDrawBuffer(Glenum mode); Specifies up to four color buffers to be drawn into mode –GL_NONE, GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK_LEFT, GL_BACK_RIGHT, GL_FRONT, GL_BACK, GL_LEFT, GL_RIGHT, GL_FRONT_AND_BACK, GL_AUXi

Angel: Interactive Computer Graphics 3E © Addison-Wesley Accumulation Buffer glAccum(Glenum operation, Glfloat value); Operation –GL_ACCUM : Multiplies by value then adds the RGBA values from the buffer selected for reading by glReadBuffer to the accumulation buffer –GL_LOAD : Multiplies by value then copies the RGBA values from the buffer selected for reading by glReadBuffer to the accumulation buffer –GL_ADD : Adds value to each RGBA in the accumulation buffer –GL_MULT : Multiplies each RGBA in the accumulation buffer by value –GL_RETURN : Transfers accumulation buffer values to the color buffer(s) currently selected for writing by glDrawBuffer

Angel: Interactive Computer Graphics 3E © Addison-Wesley Applications Compositing Image Filtering (convolution) Whole scene antialiasing Motion effects Depth-of-field effects

Angel: Interactive Computer Graphics 3E © Addison-Wesley Antialiasing glDrawBuffer(GL_AUX0); glReadBuffer(GL_AUX0); Loop n time –Jitter image plane & draw Less than one pixel –glAccum(GL_ACCUM, 1.0/n); glDrawBuffer(GL_BACK); glAccum(GL_RETURN, 1.0);

Angel: Interactive Computer Graphics 3E © Addison-Wesley Interactive Depth-of-Field Jitter camera Each frustum has common plane “in focus” Accumulate images

Angel: Interactive Computer Graphics 3E © Addison-Wesley Interactive Depth-of-Field

Angel: Interactive Computer Graphics 3E © Addison-Wesley OpenGL Perspective glFrustum(xmin,xmax,ymin,ymax,near,far) -near)

Angel: Interactive Computer Graphics 3E © Addison-Wesley Using Field of View With glFrustum it is often difficult to get the desired view gluPerpective(fovy, aspect, near, far) often provides a better interface aspect = w/h front plane

Angel: Interactive Computer Graphics 3E © Addison-Wesley z max OpenGL Perspective glFrustum allows for an unsymmetric viewing frustum gluPerspective does not -z min ) max

Go to dof.c

Angel: Interactive Computer Graphics 3E © Addison-Wesley Stencil Buffer Specifies which pixels to draw Create arbitrary shaped viewports glStencilFunc() - sets comparison function glStencilOp() sets stencil operations

Angel: Interactive Computer Graphics 3E © Addison-Wesley Reflections One of the most noticeable effect of inter-object lighting Direct calculation of the physics (ray tracing) is too expensive Our focus is to capture the most significant reflection while minimizing the overhead via rendering the “virtual object” virtual object Clipped to reflector reflector object

Angel: Interactive Computer Graphics 3E © Addison-Wesley Image vs. Object Space Methods Image space methods: create a texture from a view of the reflected objects and apply it to the reflector –Advantage: does not depend on the object geometry –Disadvantage: sampling issue and also only an approximation (environment mapping as an example) Object space methods: create the actual geometry of the object to be reflected and render it to the reflector –Disadvantage: accuracy of the geometry –Advantage: more accurate reflection (for nearby objects) Both methods need to create the virtual objects

Angel: Interactive Computer Graphics 3E © Addison-Wesley Planar Reflections The most common reflection – flat mirror, floor, wall, etc Creating virtual objects (or reflected objects) is much easier A view independent operation – only consider the relative position of the object and the reflector The virtual object is created by transforming the object across the reflector plan

Angel: Interactive Computer Graphics 3E © Addison-Wesley Planar Reflections

Angel: Interactive Computer Graphics 3E © Addison-Wesley Render the Reflected Geometry An important task: clip the reflected geometry so it is only visible on the reflector surface –Beyond the reflector boundaries and in front of reflector front side

Angel: Interactive Computer Graphics 3E © Addison-Wesley Clipping using the stencil The key is you only want the reflected geometry to appear on the reflector surface Use stencil buffer: –Clear the stencil buffer –Render the reflector and set the stencil –Render the reflected geometry only where the stencil pixels have been set The above algorithm is to use the stencil buffer to control where to draw the reflection

Angel: Interactive Computer Graphics 3E © Addison-Wesley Clipping using the stencil Another method: render the reflected object first, and then render the reflector to set the stencil buffer, then clear the color buffer everywhere except where the stencil is set This method is to use the stencil buffer to control where to erase the incorrect reflection Advantage: when it is faster to use stencil to control clearing the scene than drawing the entire scene with stencil tests

Angel: Interactive Computer Graphics 3E © Addison-Wesley The stencil erase algorithm

Angel: Interactive Computer Graphics 3E © Addison-Wesley Reflection Effect