99
1 Chapter 7 Discrete Techniques

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

Embed Size (px)

Citation preview

Page 1: 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

Chapter 7

Discrete Techniques

Page 2: 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

2

BufferDefine a buffer by its spatial resolution (n x m) and

its depth k, the number of bits/pixel

pixel

Page 3: 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

3

OpenGL Frame Buffer

Page 4: 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

4

OpenGL Buffers Color buffers can be displayed

Front & Back Left & Right Auxiliary Overlay

Depth Accumulation

High resolution buffer Stencil

Holds masks

Page 5: 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

5

Digital Images

Original TIFF JPEG 1/18 JPEG 1/37

Page 6: 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

6

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

7

Writing ModelRead destination pixel before writing source

Page 8: 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

8

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

replace ORXOR

Page 9: 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

9

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

Backing Store

Page 10: 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

10

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 11: 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

11

Raster Position OpenGL maintains a raster position as part of th

e 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 coordinat

es This position in the frame buffer is where the next

raster primitive is drawn

Page 12: 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

12

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 glReadBuff

er 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 13: 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

13

Bitmaps OpenGL treats 1-bit pixels (bitmaps) differe

ntly than multi-bit pixels (pixelmaps) Bitmaps are masks which determine if the co

rresponding 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 14: 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

14

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 15: 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

15

Drawing BitmapsglBitmap(width, height, x0, y0, xi, yi, bit

map)

first raster position

second raster position

offset from raster position

increments in raster position after bitmap drawn

Page 16: 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

16

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

17

OpenGL Pixel Functions

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

start pixel in frame buffer sizetype 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: 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

18

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

19

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

20

Reading the Header – 1/2FILE *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: 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

21

Reading the Header – 2/2

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

22

Reading the Datafscanf(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: 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

23

Scaling the Image DataWe 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: 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

24

The Display Callbackvoid display(){

glClear(GL_COLOR_BUFFER_BIT);glRasterPos2i(0,0);

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

glFlush();}

Page 25: 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

25

Lookup Tables – 1/2

Use glPixelMap() to load user-defined maps

Page 26: 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

26

Lookup Tables – 2/2 Assigning pseudocolors Color selection, based on thermal scale:

Hot colors: red, white, yellow Cold colors: blue and green Scientific visualization

Histogram adjustment/color balancing

Page 27: 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

27

Buffers for Picking Put a unique identifier(color) at the

corresponding pixels occupied by an object When picking happens, apply OpenGL’s

pixel-reading functions to obtain the color, then the associated object

Can be used together with the z-buffer algorithm to obtain the object which is closest to the camera

Page 28: 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

28

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 29: 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

29

Modeling an Orange – 1/2 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 30: 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

30

Modeling an Orange – 2/2 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 31: 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

31

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 32: 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

32

Texture Mapping

geometric model texture mapped

Page 33: 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

33

Environment Mapping

Page 34: 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

34

Bump Mapping

Page 35: 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

35

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 36: 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

36

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 37: 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

37

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 38: 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

38

Texture Mapping

parametric coordinates

texture coordinatesworld coordinates

screen coordinates

Page 39: 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

39

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 want

to go the other way

s

t

(x,y,z)

Page 40: 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

40

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 correspondsNeed a map of the form

s = s(x,y,z)

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

Page 41: 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

41

Aliasing Point sampling of the texture can lead to ali

asing errors

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

point samples in texture space

miss blue stripes

Page 42: 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

42

Area AveragingA better but slower option is to use area averaging

Note that preimage of pixel is curved

pixelpreimage

Page 43: 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

43

Sample Mapping – 1/2 In chapter 10, we will study parametric surf

aces Assume we want to map a point in the text

ure map T(s, t) to a point on the surface p(u, v) by a linear map of the form:u=as + bt + cv=ds + et + fas long as aebd, this mapping is invertible

Page 44: 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

44

Sample Mapping – 2/2

)(

),(

minmaxminmax

minmin

minmaxminmax

minmin

vvtt

ttvv

uuss

ssuu

Page 45: 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

45

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 46: 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

46

Cylindrical Mapping

parametric cylinder

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

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

s = ut = v

maps from texture space

Page 47: 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

47

Spherical MappingWe 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 cylinderbut have to decide where to putthe distortion

Spheres are use in environmental maps

Page 48: 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

48

Box Mapping Easy to use with simple orthographic

projection Also used in environmental maps

Page 49: 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

49

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

What if a ray is blocked?

Page 50: 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

50

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 application

3. specify texture parameters wrapping, filtering

Page 51: 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

51

Texture Mapping

s

t

x

y

z

image

geometry screen

Page 52: 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

52

Texture Example The texture (below) is a

256 x 256 image that has been mapped to a rectangular polygon which is viewed in perspective mode

Page 53: 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

53

Texture Mapping and the OpenGL Pipeline

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

omplexity

geometry pipelinevertices

pixel pipelineimage

rasterizer

Page 54: 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

54

Specify Texture Image 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

Page 55: 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

55

Define Image as a TextureglTexImage2D( target, level, components,

w, h, border, format, type, texels );

target: type of texture, e.g. GL_TEXTURE_2D

level: used for mipmapping (discussed later)

components: elements per texel

w, h: width and height of texels in pixels

border: used for smoothing (discussed later)

format and type: describe texels

texels: pointer to texel array

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

Page 56: 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

56

Converting a Texture Image OpenGL requires texture dimensions to be pow

ers 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 57: 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

57

Mapping a Texture 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

Page 58: 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

58

Typical CodeglBegin(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 59: 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

59

InterpolationOpenGL uses bilinear interpolation to find proper te

xels from specified texture coordinates

Can be distortions

good selectionof tex coordinates

poor selectionof tex coordinates

texture stretchedover trapezoid showing effects of bilinear interpolation

Page 60: 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

60

Texture Parameters OpenGL a variety of parameter that determin

e how texture is applied Wrapping parameters determine what happens o

f s and t are outside the (0,1) range Filter modes allow us to use area averaging inst

ead of point samples Mipmapping allows us to use textures at multipl

e resolutions Environment parameters determine how texture

mapping interacts with shading

Page 61: 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

61

Wrapping ModeClamping: 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 62: 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

62

Magnification and MinificationMore than one texel can cover a pixel (minification) ormore 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

Texture Polygon

Magnification Minification

PolygonTexture

Page 63: 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

63

Filter ModesModes 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 64: 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

64

Mipmapped Texture Mipmapping allows for prefiltered texture maps of decreasing

resolutions Lessens interpolation errors for smaller textured objects Declare mipmap level during texture definition

glTexImage2D( GL_TEXTURE_*D, level, … ) GLU mipmap builder routines will build all the textures from

a given imagegluBuild2DMipmaps(GL_TEXTURE_2D,3,64,64, GL_RGB, GL_UNSIGNED_BYTE,my_texels);

glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_NEAREST);

Page 65: 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

65

Examples pointsampling

mipmapped pointsampling

mipmapped linear filtering

linear filtering

Page 66: 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

66

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_DECAL: texture colors determines object color GL_BLEND: blends with an environmental color glTextEnvi(GL_TEXTURE_ENV, GL_TEXTURE_ENV

_MODE, GL_MODULATE); Set blend color with GL_TEXTURE_ENV_COLOR

Page 67: 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

67

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 68: 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

68

Generating Texture Coordinates OpenGL can generate texture coordinates automaticall

yglTexGen{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 69: 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

69

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 objects

Page 70: 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

70

Applying Textures1. 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 71: 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

71

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 te

xture units

Page 72: 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

72

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 73: 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

73

Writing Model Use A component of RGBA (or RGB) color to s

tore opacity During rendering we can expand our writing mod

el to use RGBA values

Color Buffer

destinationcomponent

blend

destination blending factor

source blending factor sourcecomponent

Page 74: 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

74

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 asc’ = [br sr+ cr dr, bg sg+ cg dg , bb sb+ cb db , b s+ c d ]

Page 75: 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

75

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 76: 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

76

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 77: 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

77

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 78: 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

78

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 79: 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

79

Opaque and Translucent Polygons Suppose that we have a group of polygons some of w

hich 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 80: 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

80

Physical Models Dealing with translucency in a physically correct

manner is difficult due to the complexity of the internal interactions of l

ight and matter Using a pipeline renderer Revert to writing model

Page 81: 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

81

Line Aliasing Ideal raster line is one pixel wide All line segments, other than vertical and h

orizontal segments, partially cover pixels Simple algorithms color

only whole pixels Lead to the “jaggies”

or aliasing Similar issue for polygons

Page 82: 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

82

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 83: 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

83

Area Averaging Use average area 1+2-12 as blending factor

Page 84: 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

84

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 85: 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

85

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 86: 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

86

Fog Functions

Page 87: 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

87

OpenGL Fog FunctionsGLfloat fcolor[4] = {……}:

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

Page 88: 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

88

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 buff

er

Page 89: 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

89

Applications Compositing Whole scene antialiasing Image Filtering (convolution) Adjusting the depth of field Motion effects (motion-blur)

Page 90: 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

90

CompositingglClear(GL_ACCUM_BUFFER_BIT);

for(i=0; i< num_images; i++)

{

glClear(GL_COLOR_BUFFER_BIT |GL_DEPTH_BUFFER_BIT);

display_image(i);

glAccum(GL_ACCUM, 1.0/(float) num_images);

}

glAccum(GL_RETURN, 1.0);

Page 91: 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

91

Scene Antialiasing Regenerate the same scene with all the object

s, or the viewer, shifted slightly (less than one pixel), then we generate different aliasing artifacts

If we average together with resulting images, the aliasing effects are smoothed out

Usually it’s easier to shift (jitter) the viewer by gluPerspective() or glOrtho()

Page 92: 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

92

Image Filtering

m

mk

n

nlljkiklij

ij

ahb

aA

,

][

H: Filter(convolution) matrix of (2m+1)×(2n+1)

010

111

010

5

1H

Examples:

121

242

121

16

1H

010

151

010

H

Page 93: 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

93

Motion Blur Jitter an object and render it multiple times, leaving

the positions of the other objects unchanged, we get dimmer copies of the jittered object

If the object is moved along a path, rather then randomly jittered, we see the trail of the object motion blur

We could adjust the constant in glAccum to render the object in the final position with greater opacity to create the impression of speed differences

Page 94: 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

94

Adjusting Depth of Field

f

nearf

nearff

z

zz

x

xx

zzz

xxx

minmin

minmin )(

zf

znearxmin

x´min

x

Page 95: 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

95

Homework2 – 1/4 Due 6/2 midnight Problem1: 6.19

Could add up to three lights Could change sphere colors Could change sphere materials

Page 96: 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

96

Homework2 – 2/4 Problem2: texture mapping a fractal terrain

Input an image for texture mapping Generate a 2D height-field fractal terrain Texture map the image on this fractal terrain

Page 97: 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

97

Homework2 – 3/4

Page 98: 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

98

Homework2 – 4/4

Read textbook page 552, 553

Page 99: 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

99

Grade Adjustment Homework1 20% Midterm 25% Homework2 25% Final Exam 30%