200 likes | 510 Views
Texture Mapping. Course: Computer Graphics Presented by Fan Chen fchen@cs.kent.edu. Outline. Why Texture Mapping? What is Texture Mapping? Texture Mapping in OpenGL. Why Texture Mapping?. Model + Texture+ Shading. Model. Why Texture Mapping?. Surfaces “in the wild” are very complex
E N D
Texture Mapping Course: Computer Graphics Presented by Fan Chen fchen@cs.kent.edu
Outline • Why Texture Mapping? • What is Texture Mapping? • Texture Mapping in OpenGL
Why Texture Mapping? Model + Texture+ Shading Model
Why Texture Mapping? • Surfaces “in the wild” are very complex • Cannot model all the fine variations • We need to find ways to add surface detail • How?
What is Texture Mapping? • Application of an image onto a model • An image is mapped onto the 2D domain of a 3D model • Correspondence between domain of surface and texture gives method to apply image
Mapping Functions • Basic problem is how to find the maps • Consider mapping from texture to surface • Three functions are needed x = x(s,t) y = y(s,t) z = z(s,t) (x,y,z) t s
Texture Mapping in OpenGL Three steps to applying a texture • Specify the texture • Read or generate image • Assign to texture • Enable texturing • Assign texture coordinates to vertices • Proper mapping function • Specify texture parameters • Wrapping , filtering
Specify Texture Image • Define a texture image from an array of texels (texture elements) • Glubytemy_texels[512][512][3]; • Enable texture mapping • glEnable(GL_TEXTURE_2D)
Mapping a Texture • glTexCoord2f() specified at each vertex Texture Space Object Space t 1, 1 (s, t) = (0.2, 0.8) 0, 1 A a c (0.4, 0.2) b B C (0.8, 0.4) s 0, 0 1, 0
Typical Code glBegin(GL_POLYGON); glTexCoord2f(s0, t0); glVertex3f(x0, y0, z0); glTexCoord2f(s1, t1); glVertex3f(x1, y1, z1); glTexCoord2f(s2, t1); glVertex3f(x2, y2, z2); . . glEnd();
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
t s GL_REPEAT wrapping GL_CLAMP wrapping texture Wrapping Mode Clamping: if s,t > 1 use 1, if s,t <0 use 0 Repeating: 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 Polygon Texture Polygon Minification Magnification Magnification and Minification • Magnification: more than one pixel can cover a texel • Minification: more than one texel can cover a pixel • Can use point sampling (nearest texel) or linear filtering to obtain texture values
Filter Mode 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);
Mipmapping • Mipmapping allows for pre-filtered texture maps of decreasing resolutions according the distance to the viewer • Different resolutions • Level 0: original texture map • Level 1: half size in width and height
Mipmapping • Define mipmaps • glTexImage2D(GL_TEXTURE_2D, level, GL_RGB, …) • Where level = 0, 1, 2, .. Without mipmapping With mipmapping
Reference • Text Book • Edward Angel, Interactive Computer Graphics: A Top-Down Approach with OpenGL, 5th edition, Addison-Wesley • Online courses • www.tlaloc.sfsu.edu/~yoon/csc830/830_lecture8.texture.ppt • www.jcsites.juniata.edu/faculty/kruse/cs330/AngelTexture.ppt