Buffers Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.

Slides:



Advertisements
Similar presentations
Better Interactive Programs
Advertisements

©Zachary Wartell, UNCC9/28/ :30 AM 1 Overview of OpenGL Revision: 1.2 Copyright Professor Zachary Wartell, University of North Carolina All Rights.
Computer Graphics Tz-Huan Huang National Taiwan University (Slides are based on Prof. Chen’s)
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Building Models modified by Ray Wisman Ed Angel Professor of Computer Science,
Compositing and Blending - Chapter 8 modified by Ray Wisman Ed Angel Professor of Computer Science, Electrical and Computer Engineering,
Objectives Introduce OpenGL buffers and read/write Introduce OpenGL buffers and read/write Introduce texture mapping Introduce texture mapping Introduce.
Buffers Mohan Sridharan Based on slides created by Edward Angel 1 CS4395: Computer Graphics.
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 Programming with OpenGL Part 2: Complete Programs Ed Angel Professor of Computer Science,
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Better Interactive Programs Ed Angel Professor of Computer Science, Electrical and Computer.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Introduction to Computer Graphics Ed Angel Professor of Computer Science, Electrical and.
OpenGL Texture Mapping
OpenGL Texture Mapping Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Models and Architectures Ed Angel Professor of Computer Science, Electrical and Computer.
CS 4731: Computer Graphics Lecture 21: Raster Graphics Part 2 Emmanuel Agu.
OpenGL Pixel Operations, Bitmaps, Fonts and Images The Current Raster Position Current raster position: A position in window coordinates where the next.
Components Text Text--Processing Software A Word Processor is a software application that provides the user with the tools to create and edit text.
CSE (Notre Dame) Computer Graphics Lecture 16 A Simple Draw Image Example More Texture Mapping Simple OpenGL Image Library (SOIL) Transparency &
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
 Bitmap: A bitmap is a rectangular array of 0s and 1s that serves as a drawing mask for a corresponding rectangular portion of the window.  Applications:
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.
Chapter 2 Getting Started: Drawing Figures. The Framebuffer Lecture 2 Fri, Aug 29, 2003.
COMPUTER GRAPHICS Hochiminh city University of Technology Faculty of Computer Science and Engineering CHAPTER 8: Texture Mapping.
2002 by Jim X. Chen: 1 So far, we only concerned with the rendering of geometric data. Two other important classes of data:
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 1: Background Ed Angel Professor of Computer Science, Electrical.
Graphics Systems and OpenGL. Business of Generating Images Images are made up of pixels.
Introduction to Computer Graphics Dr.Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Department Frederick University.
Lecture 4 Pixels, Images and Image Files 1. In this Lecture, you will learn the following concepts: Image files (in particular, the BMP file format) How.
Pixels, Images and Image Files 1 By Dr. HANY ELSALAMONY.
Computing & Information Sciences Kansas State University Lecture 20 of 42CIS 636/736: (Introduction to) Computer Graphics Lecture 21 of 42 William H. Hsu.
Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute.
Chapter 8: Discrete Techniques Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
1 Better Interactive Programs. 2 Objectives Learn to build more sophisticated interactive programs using ­Picking Select objects from the display Three.
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.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
Discrete Techniques Chapter 7 Begun February 22, 2005 Finished April 26, 2005.
111/17/ :24 UML Solution Involves Selection of Discrete Representation Values.
Graphics: Conceptual Model Real Object Human Eye Display Device Graphics System Synthetic Model Synthetic Camera Real Light Synthetic Light Source.
1 Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
Discrete Techniques Chapter 7.
Buffers Computer Graphics I, Fall 2010.
Buffers, Compositing and Blending Week 8 David Breen Department of Computer Science Drexel University Based on material from Ed Angel, University of New.
Introduction to Computer Graphics with WebGL Ed Angel Professor Emeritus of Computer Science Founding Director, Arts, Research, Technology and Science.
1 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2005 Programming with OpenGL Part 3: Three Dimensions Ed Angel Professor of Computer Science,
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.
Graphics and Image Data Representations 1. Q1 How images are represented in a computer system? 2.
Compositing and Blending Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico.
CS425 © 2003 Ray S. Babcock Pixels and Bitmaps ● OpenGL allows us to work directly with bits and groups of bits, or pixels, which flow down a parallel.
Computer Graphics (Fall 2003) COMS 4160, Lecture 5: OpenGL 1 Ravi Ramamoorthi Many slides courtesy Greg Humphreys.
CSC Graphics Programming Budditha Hettige Department of Statistics and Computer Science.
Chapter 8. Drawing Pixels, Bitmaps, Fonts, and Images Computer Graphics (spring, 2009) School of Computer Science University of Seoul.
Angel: Interactive Computer Graphics 5E © Addison-Wesley 2009
Buffers Ed Angel Professor Emeritus of Computer Science
Discrete Techniques.
Better Interactive Programs
Discrete Techniques Chapter 8.
Introduction to Computer Graphics with WebGL
Programming with OpenGL Part 2: Complete Programs
Programming with OpenGL Part 2: Complete Programs
Discrete Techniques Chapter 8.
Building Models Ed Angel
Introduction to Computer Graphics with WebGL
Geb Thomas Adapted from the OpenGL Programming Guide
Better Interactive Programs
Computer Graphics Buffers
Angel: Interactive Computer Graphics5E © Addison-Wesley 2009
Programming with OpenGL Part 2: Complete Programs
Buffers Ed Angel Professor Emeritus of Computer Science
Programming with OpenGL Part 2: Complete Programs
Presentation transcript:

Buffers Ed Angel Professor of Computer Science, Electrical and Computer Engineering, and Media Arts University of New Mexico

2 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 Objectives Introduce additional OpenGL buffers Learn to read and write buffers Learn to use blending

3 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 Buffer Define a buffer by its spatial resolution ( n x m ) and its depth (or precision) k, the number of bits/pixel pixel

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

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

6 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

7 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 Writing Model Read destination pixel before writing source

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

9 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 XOR mode Recall from Chapter 3 that we can use XOR by enabling logic operations and selecting the XOR write mode 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  M M  S  M S  S  M swaps the S and M

10 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 The Pixel Pipeline OpenGL has a separate pipeline for pixels ­Writing pixels involves Moving pixels from processor memory to the frame buffer Format conversions Mapping, Lookups, Tests ­Reading pixels Format conversion

11 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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 ­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

12 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

13 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 Bitmaps OpenGL treats 1-bit pixels (bitmaps) differently from multi-bit pixels (pixelmaps) Bitmaps are masks that 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 font: GLUT_BIT_MAP_8_BY_13

14 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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(…..)

15 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

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

17 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 Pixel Maps OpenGL works with rectangular arrays of pixels called pixel maps or images Pixels are in one byte ( 8 bit) 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

18 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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 raster position

19 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

20 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

21 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

22 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

23 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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

24 Angel: Interactive Computer Graphics 4E © Addison-Wesley 2004 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 can use glPixelStorei(GL_UNPACK_SWAP_BYTES,GL_TRUE);

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