91
Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute of Technology

Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Embed Size (px)

Citation preview

Page 1: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 7

Discrete Techniques

Dr. Giorgos A. DemetriouDr. Stephania Loizidou Himona

Computer ScienceFrederick Institute of Technology

Page 2: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 72

Buffer

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

pixel

Page 3: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 73

OpenGL Frame Buffer

Page 4: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 74

OpenGL Buffers

Color buffers can be displayed Front Back Auxiliary Overlay

Depth Accumulation

High resolution buffer Stencil

Holds masks

Page 5: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 75

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

sourcememory

Page 6: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 76Demetriou - Computer Graphics - Chapter 7

Writing Model

Read destination pixel before writing source

Page 7: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 77

Writing Modes

Source and destination bits are combined bitwise 16 possible functions (one per column in table)

replace ORXOR

Page 8: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 78

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 menuthe sequence S S M M S M S S Mswaps the S and M

Page 9: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 79

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

Page 10: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 710

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

Page 11: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 711

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

Page 12: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 712

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

Page 13: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 713

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(…..)

Page 14: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 714

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

Page 15: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 715

Example: Checker Board

GLubyte wb[2] = {0 x 00, 0 x ff};GLubyte check[512];int i, j;for(j=0; i<64; i++) for (j=0; j<64, j++) check[i*8+] = wb[(i/8+j)%2];

glBitmap( 64, 64, 0.0, 0.0, 0.0, 0.0, check);

Page 16: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 716

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

Page 17: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 717

OpenGL Pixel Functions

glReadPixels(x,y,width,height,format,type,myimage)

start pixel in frame buffersize

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

Page 18: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 718

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

Page 19: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 719

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 nrows columns maxvaluepixels

Page 20: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 720

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

Page 21: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 721

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 bylooking for # in first column

Page 22: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 722

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

Page 23: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 723

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);

Page 24: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 724

The display callback

void display(){glClear(GL_COLOR_BUFFER_BIT);glRasterPos2i(0,0);

glDrawPixels(n,m,GL_RGB, GL_UNSIGNED_INT, image);glFlush();

}

Page 25: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 725

The Limits of Geometric Modeling

Although graphics cards can render over 10 million polygons per second, that number is insufficient for many phenomena Clouds Grass Terrain Skin

Page 26: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 726

Modeling an Orange

Consider the problem of modeling an orange (the fruit) Start with an orange-colored sphere

Too simple

Replace sphere with a more complex shape Does not capture surface characteristics (small dimples) Takes too many polygons to model all the dimples

Page 27: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 727

Modeling an Orange (cont.)

Take a picture of a real orange, scan it, and “paste” onto simple geometric model This process is texture mapping

Still might not be sufficient because resulting surface will be smooth Need to change local shape Bump mapping

Page 28: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 728

Three Types of Mapping

Texture Mapping Uses images to fill inside of polygons

Environmental (reflection mapping) Uses a picture of the environment for texture maps Allows simulation of highly specular surfaces

Bump mapping Emulates altering normal vectors during the rendering

process

Page 29: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 729

Texture Mapping

geometric model texture mapped

Page 30: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 730

Environment Mapping

Page 31: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 731

Bump Mapping

Page 32: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 732

Where does mapping take place?

Mapping techniques are implemented at the end of the rendering pipeline Very efficient because few polygons pass down the geometric

pipeline

Page 33: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 733

Is it simple?

Although the idea is simple---map an image to a surface---there are 3 or 4 coordinate systems involved

2D image

3D surface

Page 34: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 734

Coordinate Systems

Parametric coordinates May be used to model curved surfaces

Texture coordinates Used to identify points in the image to be mapped

World Coordinates Conceptually, where the mapping takes place

Screen Coordinates Where the final image is really produced

Page 35: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 735

Texture Mapping

parametric coordinates

texture coordinates world coordinates screen coordinates

Page 36: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 736

Mapping Functions

Basic problem is how to find the maps Consider mapping from texture coordinates to a point

a surface Appear to need three functions

x = x(s,t)y = y(s,t)z = z(s,t)

But we really wantto go the other way

s

t

(x,y,z)

Page 37: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 737

Backward Mapping

We really want to go backwards Given a pixel, we want to know to which point on an object it

corresponds Given a point on an object, we want to know to which point in

the texture it corresponds

Need a map of the form

s = s(x,y,z)

t = t(x,y,z) Such functions are difficult to find in general

Page 38: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 738

Two-part mapping

One solution to the mapping problem is to first map the texture to a simple intermediate surface

Example: map to cylinder

Page 39: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 739

Cylindrical Mapping

parametric cylinder

x = r cos 2 uy = r sin 2uz = v/h

maps rectangle in u,v space to cylinder of radius r and height h in world coordinates

s = ut = v

maps from texture space

Page 40: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 740

Spherical Map

We can use a parametric sphere

x = r cos 2uy = r sin 2u cos 2vz = r sin 2u sin 2v

in a similar manner to the cylinder but have to decide where to put the distortion

Spheres are use in environmental maps

Page 41: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 741

Box Mapping

Easy to use with simple orthographic projection Also used in environmental maps

Page 42: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 742

Second Mapping

Map from intermediate object to actual object Normals from intermediate to actual Normals from actual to intermediate Vectors from center of intermediate

intermediateactual

Page 43: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 743

Aliasing

Point sampling of the texture can lead to aliasing errors

point samples in u,v (or x,y,z) space

point samples in texture space

miss blue stripes

Page 44: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 744

Area Averaging

A better but slower option is to use area averaging

Note that preimage of pixel is curved

pixelpreimage

Page 45: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 745

OpenGL Texture Mapping:Basic Strategy Three steps to applying a texture

1. specify the texture

read or generate image assign to texture enable texturing

2. assign texture coordinates to vertices

Proper mapping function is left to application3. specify texture parameters

wrapping, filtering

Page 46: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 746

Texture Mapping

s

t

x

y

z

image

geometry screen

Page 47: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 747

Texture Example

The texture (below) is a 256 x 256 image that has been mapped to a rectangular polygon which is viewed in perspective

Page 48: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 748

Texture Mapping and the OpenGL Pipeline

geometry pipelinevertices

pixel pipelineimage

rasterizer

Images and geometry flow through separate pipelines that join at the rasterizer “complex” textures do not affect geometric complexity

Page 49: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 749

Define a texture image from an array of texels (texture elements) in CPU memory Glubyte my_texels[512][512];

Define as any other pixel map Scan Via application code

Enable texture mapping glEnable(GL_TEXTURE_2D) OpenGL supports 1-4 dimensional texture maps

Specify Texture Image

Page 50: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 750

Define Image as a Texture

glTexImage2D( target, level, components, w, h, border, format, type, texels );

target: type of texture, e.g. GL_TEXTURE_2Dlevel: used for mipmapping (discussed later)components: elements per texelw, h: width and height of texels in pixelsborder: used for smoothing (discussed later)format and type: describe texelstexels: pointer to texel array

glTexImage2D(GL_TEXTURE_2D, 0, 3, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, my_texels);

Page 51: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 751

Converting A Texture Image

OpenGL requires texture dimensions to be powers of 2 If dimensions of image are not powers of 2

gluScaleImage( format, w_in, h_in, type_in, *data_in, w_out, h_out, type_out, *data_out );

data_in is source image data_out is for destination image

Image interpolated and filtered during scaling

Page 52: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 752

Based on parametric texture coordinates glTexCoord*() specified at each vertex

s

t1, 1

0, 1

0, 0 1, 0

(s, t) = (0.2, 0.8)

(0.4, 0.2)

(0.8, 0.4)

A

B C

a

bc

Texture Space Object Space

Mapping a Texture

Page 53: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 753

Typical Code

glBegin(GL_POLYGON);glColor3f(r0, g0, b0);glNormal3f(u0, v0, w0);glTexCoord2f(s0, t0);glVertex3f(x0, y0, z0);glColor3f(r1, g1, b1);glNormal3f(u1, v1, w1);glTexCoord2f(s1, t1);glVertex3f(x1, y1, z1);

.

.glEnd();

Note that we can use vertex arrays to increase efficiency

Page 54: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 754

Interpolation

OpenGL uses bilinear interpolation to find proper texels from specified texture coordinates

Can be distortions

good selectionof tex coordinates

poor selectionof tex coordinates

texture stretchedover trapezoid

showing effects of bilinear interpolation

Page 55: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 755

Texture Parameters

OpenGL a variety of parameter that determine how texture is applied Wrapping parameters determine what happens of s and t are

outside the (0,1) range Filter modes allow us to use area averaging instead of point

samples Mipmapping allows us to use textures at multiple resolutions Environment parameters determine how texture mapping

interacts with shading

Page 56: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 756

Wrapping Mode

Clamping: if s,t > 1 use 1, if s,t <0 use 0

Wrapping: use s,t modulo 1

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP )

glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )

texture

s

t

GL_CLAMPwrapping

GL_REPEATwrapping

Page 57: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 757

Magnification and Minification

Texture Polygon

Magnification Minification

PolygonTexture

More than one texel can cover a pixel (minification) or more than one pixel can cover a texel (magnification)

Can use point sampling (nearest texel) or linear filtering ( 2 x 2 filter) to obtain texture values

Page 58: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 758

Filter Modes

Modes determined by glTexParameteri( target, type, mode )

glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MAG_FILTER, GL_NEAREST);

glTexParameteri(GL_TEXTURE_2D, GL_TEXURE_MIN_FILTER, GL_LINEAR);

Note that linear filtering requires a border of an extra texel for filtering at edges (border = 1)

Page 59: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 759

Mipmapped Textures

Mipmapping allows for prefiltered texture maps of decreasing resolutions

Lessens interpolation errors for smaller textured objects

Declare mipmap level during texture definitionglTexImage2D( GL_TEXTURE_*D, level, … )

GLU mipmap builder routines will build all the textures from a given imagegluBuild*DMipmaps( … )

Page 60: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 760

Example

pointsampling

mipmapped pointsampling

mipmapped linear

filtering

linear filtering

Page 61: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 761

Texture Functions

Controls how texture is applied glTexEnv{fi}[v]( GL_TEXTURE_ENV, prop, param )

GL_TEXTURE_ENV_MODE modes GL_MODULATE: modulates with computed shade GL_BLEND: blends with an environmental color GL_REPLACE: use only texture color GL(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_MODULATE);

Set blend color with GL_TEXTURE_ENV_COLOR

Page 62: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 762

Perspective Correction Hint

Texture coordinate and color interpolation either linearly in screen space or using depth/perspective values (slower)

Noticeable for polygons “on edge” glHint( GL_PERSPECTIVE_CORRECTION_HINT, hint )

where hint is one of GL_DONT_CARE GL_NICEST GL_FASTEST

Page 63: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 763

Generating Texture Coordinates

OpenGL can generate texture coordinates automaticallyglTexGen{ifd}[v]()

specify a plane generate texture coordinates based upon distance from the plane

generation modes GL_OBJECT_LINEAR GL_EYE_LINEAR GL_SPHERE_MAP (used for environmental maps)

Page 64: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 764

Texture Objects

Texture is part of the OpenGL state If we have different textures for different objects, OpenGL will be

moving large amounts data from processor memory to texture memory

Recent versions of OpenGL have texture objects one image per texture object

Texture memory can hold multiple texture obejcts

Page 65: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 765

Applying Textures II

1. specify textures in texture objects2. set texture filter 3. set texture function 4. set texture wrap mode5. set optional perspective correction hint6. bind texture object 7. enable texturing8. supply texture coordinates for vertex

coordinates can also be generated

Page 66: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 766

Other Texture Features

Environmental Maps Start with image of environment through a wide angle lens

Can be either a real scanned image or an image created in OpenGL t

Use this texture to generate a spherical map Use automatic texture coordinate generation

Multitexturing Apply a sequence of textures through cascaded texture units

Page 67: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 767

Textures in OpenGL

Create a “texture object” and specify the texture type associated with it e.g. 2D/3D, RGB/RGBA/…, etc.

Indicate how the texture is to be applied to each pixel e.g. nearest/interpolated, repeated/clamped, etc.

Enable texture mapping Supply the texture coordinates

Page 68: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 768

Texture Commands in OpenGL

glGenTextures(GLsizei n, GLuint *tex_names) Returns n integers that are to be uniquely associated with

texture objects.

glBindTexture(GLenum target, GLuint tex_name) Creates a new texture object and assigns it the provided

name, or makes a previously created texture object active Defines the dimensionality of the texture object to be

according to the provided target.

Page 69: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 769

Texture Commands in OpenGL (cont.)

glTexParameter{if} (GLenum target, GLenum pname, TYPE param) Sets various parameters that control how a texture is applied

to a polygon fragment or stored in a texture object. Options for target:

GL_TEXTURE_1D GL_TEXTURE_2D GL_TEXTURE_3D

Page 70: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 770

Texture Commands in OpenGL (cont.)

Some options for pname and param: GL_TEXTURE_WRAP_{S,T,R}

GL_CLAMP, GL_REPEAT, GL_CLAMP_TO_EDGE GL_TEXTURE_MAG_FILTER

GL_NEAREST, GL_LINEAR GL_TEXTURE_MIN_FILTER

GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_NEAREST, GL_LINEAR_MIPMAP_LINEAR

Page 71: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 771

Texture Commands in OpenGL (cont.)

glTexImage2D(GLenum target, GLint level, Glint internalFormat, GLsizei width, GLsizei height, Glint border, GLenum format, GLenum type, const GLvoid *texels) target is GL_TEXTURE_2D

(or GL_PROXY_TEXTURE_2D ) level specifies the mipmap level that the texture is defined for

(if no mipmapping, set level=0) internalFormat options include: GL_RGB, GL_RGBA, and

many more (38+ options) border specifies width in pixels of texture border (0 or 1)

Page 72: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 772

Texture Commands in OpenGL (cont.)

glTexEnv{if}(GLenum target, GLenum pname, TYPE param) target must be GL_TEXTURE_ENV Options for pname, param are:

GL_TEXTURE_ENV_MODE GL_REPLACE, GL_DECAL, GL_MODULATE,

GL_BLEND GL_TEXTURE_ENV_COLOR

Four values in {0..1} representing the R,G,B,A color to blend with the object’s color according to the pattern defined in the texture map

Page 73: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 773

MIP Mapping

“MIP” = multum in parvo (many things in a small place) an efficient way to store pre-filtered versions of a texture map

Page 74: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 774

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

Page 75: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 775

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

Page 76: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 776

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

destinationcomponent

blend

destination blending factor

source blending factor sourcecomponent

Page 77: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 777

Blending Equation

We can define source and destination blending factors for each component

s = [sr, sg, sb, s]

d = [dr, dg, db, d]

source and destination colors

b = [br, bg, bb, b]

c = [cr, cg, cb, c]

Blend as

c’ = [br sr+ cr dr, bg sg+ cg dg , bb sb+ cb db , b s+ c d ]

Page 78: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 778

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

Page 79: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 779

Example

Suppose that we start with the opaque background color (R0,G0,B0,1)

This color becomes the initial destination color We now want to blend in a translucent polygon with color

(R1,G1,B1,1)

Select GL_SRC_ALPHA and GL_ONE_MINUS_SRC_ALPHA as the source and destination blending factors

R’1 = 1 R1 +(1- 1) R0, ……

Note this formula is correct if polygon is either opaque or transparent

Page 80: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 780

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

Page 81: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 781

Order Dependency

Is this image correct? Probably not Polygons are rendered

in the order they pass

down the pipeline Blending functions

are order dependent

Page 82: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 782

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

Page 83: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 783

Fog

We can composite with a fixed color and have the blending factors depend on depth Simulates a fog effect

Blend source color Cs and fog color Cf by

Cs’=f Cs + (1-f) Cf

f is the fog factor Exponential Gaussian Linear (depth cueing)

Page 84: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 784

Fog Functions

Page 85: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 785

OpenGL Fog Functions

GLfloat fcolor[4] = {……}:

glEnable(GL_FOG);glFogf(GL_FOG_MODE, GL_EXP);glFogf(GL_FOG_DENSITY, 0.5);glFOgv(GL_FOG, fcolor);

Page 86: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 786

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

Page 87: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 787

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 overlap overlap

Page 88: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 788

Area Averaging

Use average area 1+2-12 as blending factor

Page 89: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 789

OpenGL Antialiasing

Can enable separately for points, lines, or polygons

glEnable(GL_POINT_SMOOTH);glEnable(GL_LINE_SMOOTH);glEnable(GL_POLYGON_SMOOTH);

glEnable(GL_BLEND);glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Page 90: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 790

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 this problem

Write into it or read from it with a scale factor Slower than direct compositing into the frame buffer

Page 91: Demetriou/Loizidou – ACSC 345 – Chapter 7 Discrete Techniques Dr. Giorgos A. Demetriou Dr. Stephania Loizidou Himona Computer Science Frederick Institute

Demetriou/Loizidou – ACSC 345 – Chapter 791

Applications

Compositing Image Filtering (convolution) Whole scene antialiasing Motion effects