CS 445 / 645 Introduction to Computer Graphics

# CS 445 / 645 Introduction to Computer Graphics

## CS 445 / 645 Introduction to Computer Graphics

- - - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - - -
##### Presentation Transcript

1. CS 445 / 645Introduction to Computer Graphics Lecture 19 Texture Maps

2. Texture Mapping • Limited ability to generate complex surfaces with geometry • Images can convey the illusion of geometry • Images painted onto polygons is called texture mapping

3. Texture Maps • Chapter 9 of Open GL Programming Guide (Red Book) • Images applied to polygons to enhance the visual effect of a scene • Rectangular arrays of data • Color, luminance, alpha • Components of array called texels • Or in 3D, volumetric voxels

4. T V U S Texture Mapping • Texture map is an image, two-dimensional array of color values (texels) • Texels are specified by texture’s (u,v) space • At each screen pixel, texel can be used to substitute a polygon’s surface property (color) • We must map (u,v) space to polygon’s (s, t) space

5. Texture Mapping • (u,v) to (s,t) mapping can be explicitly set at vertices by storing texture coordinates with each vertex • How do we compute (u,v) to (s,t) mapping for points in between • Watch for aliasing • Watch for many to one mappings • Watch for perspective foreshortening effects and linear interpolation

6. Example Texture Map Applied to tilted polygon

7. Example Texture Map glVertex3d (s, s, s) glTexCoord2d(1,1); glVertex3d (-s, -s, -s) glTexCoord2d(0, 0);

8. Example Texture Map glVertex3d (s, s, s) glTexCoord2d(5, 5); Repeating textures vs.Clamped textures glVertex3d (s, s, s) glTexCoord2d(1, 1);

9. The Art of 3D Computer Animation and EffectsIsaac Kerlow

10. Texture Coordinates • Every polygon can have object coordinates and texture coordinates • Object coordinates describe where polygon vertices are on the screen • Texture coordinates describe texel coordinates of each vertex (usually 0 -> 1) • Texture coordinates are interpolated along vertex-vertex edges • glTexCoord{1234}{sifd}(TYPE coords) s, t, r, and q (for homogeneous coordinates, an advanced topic) Why 14 coords?

11. Textures • Texture Object • An OpenGL data type that keeps textures resident in memory and provides identifiers to easily access them • Provides efficiency gains over having to repeatedly load and reload a texture • You can prioritize textures to keep in memory • OpenGL uses least recently used (LRU) if no priority is assigned

12. Example use of Texture • Read .bmp from file • Use Image data type • getc() and fseek() to read image x & y size • fread() fills the Imagedata memory with actual red/green/blue values from .bmp • Note • malloc() Image->data to appropriate size • .bmp stores color in bgr order and we convert to rgb order

13. Step 2 – create Texture Objects • glGenTextures(1, &texture[texture_num]); • First argument tells GL how many Texture Objects to create • Second argument is a pointer to the place where OpenGL will store the names (unsigned integers) of the Texture Objects it creates • texture[ ] is of type GLuint

14. Step 3 – Specify which texture object is about to be defined • Tell OpenGL that you are going to define the specifics of the Texture Object it created • glBindTexture(GL_TEXTURE_2D, texture[texture_num]); • Textures can be 1D and 3D as well

15. Step 4 – Begin defining texture • glTexParameter() • Sets various parameters that control how a texture is treated as it’s applied to a fragment or stored in a texture object • // scale linearly when image bigger than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); • // scale linearly when image smaller than texture glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MIN_FILTER,GL_LINEAR);

16. Step 5 – Assign image data • glTexImage2D();

17. glTexImage2D – Arg 1 • GLenum target • GL_TEXTURE_{1|2|3}D • GL_PROXY_TEXTURE_2D • Provides queries for texture resources • Proceed with hypothetical texture use (GL won’t apply the texture) • After query, call GLGetTexLevelParamter to verify presence of required system components • Doesn’t check possibility of multiple texture interference

18. glTexImage2D – Arg 2 • GLint level • Used for Level of Detail (LOD) • LOD stores multiple versions of texture that can be used at runtime (set of sizes) • Runtime algorithms select appropriate version of texture • Pixel size of polygon used to select best texture • Eliminates need for error-prone filtering algorithms

19. glTexImage2D – Arg 3 • GLint internalFormat • GL defines 38 symbolic constants that describe which of R, G, B, and A are used in internal representation of texels • Provides control over things texture can do • High bit depth alpha blending • High bit depth intensity mapping • General purpose RGB • GL doesn’t guarantee all options are available on given hardware

20. glTexImage2D – Args 4-6 • GLsizei width • GLsizei height • Dimensions of texture image • Must be 2m + 2b (b=0 or 1 depending on border) • min, 64 x 64 • GLint border • Width of border (1 or 0) • Border allows linear blending between overlapping textures • Useful when manually tiling textures

21. glTexImage2D – Args 7 & 8 • GLenum format • Describe how texture data is stored in input array • GL_RGB, GL_RGBA, GL_BLUE… • GLenum type • Data size of array components • GL_SHORT, GL_BYTE, GL_INT…

22. glTexImage2D – Arg 9 • Const GLvoid *texels • Pointer to data describing texture map

23. Step 6 – Apply texture • Before defining geometry • glEnable(GL_TEXTURE_2D); • glBindTexture(GL_TEXTURE_2D, texture[0]); • glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE);

24. glTexEnv() First argument to function is always GL_TEXTURE_ENV

25. gluScaleImage() • Alters the size of an image to meet the 2m size requirement of OpenGL • Scaling performed by linear and box filtering

26. glCopyTexImage2D() • Use current frame buffer contents as texture • Copy frame buffer to named texture location

27. glTexSubImage2D() • Replace a region of current working texture with a smaller texture • SubImage need not adhere to 2m size limitation • This is how you add data from your system’s camera to GL environment • glCopyTexSubImage2D • Frame buffer cut and paste possible too

28. Bump Mapping • Use textures to modify surface geometry • Use texel values to modify surface normals of polygon • Texel values correspond to height field • Height field models a rough surface • Partial derivative of bump map specifies change to surface normal

29. Bump Mapping

30. Displacement Mapping • Bump mapped normals are inconsistent with actual geometry. Problems arise (shadows). • Displacement mapping actually affects the surface geometry

31. Mipmaps • multum in parvo -- many things in a small place • A texture LOD technique • Prespecify a series of prefiltered texture maps of decreasing resolutions • Requires more texture storage • Eliminates shimmering and flashing as objects move (why?)

32. Shimmering in mipmaps • How do I reduce the size of this image by half? far near

33. MIPMAPS • With versus without MIPMAP

34. MIPMAPS • Arrange different versions into one block of memory

35. gluBuild2DMipmaps • Automatically constructs a family of textures from original texture size down to 1x1

36. Advanced Mipmaps • You can specify additional mipmap levels on the fly • MIN_LOD may reduce popping • MAX_LOD may reduce over compression • You can specify min mipmap level • Useful for mosaicing (Alphabet on a texture)

37. Filtering • OpenGL tries to pick best mipmap level • Question: Which texel corresponds to a particular pixel? • GL_NEAREST (Point Sampling) • Pick the texel with center nearest pixel • GL_LINEAR (Bilinear Sampling) • Weighted average of 2x2 closest texels • GL_NEAREST_MIPMAP_LINEAR • Average nearest texels from two mipmap levels • GL_LINEAR_MIPMAP_LINEAR (Trilinear) • Average two averaged texels from two mipmaps