1 / 25

Texture Mapping

Texture Mapping. Until now, colors and shades determined the vertices color Texture is the characteristic physical structure given to an object by the size, shape, arrangement of its parts By texture mapping we apply image data to a geometric primitive. Basic strategy.

carpenter
Download Presentation

Texture Mapping

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Texture Mapping • Until now, colors and shades determined the vertices color • Texture is the characteristic physical structure given to an object by the size, shape, arrangement of its parts • By texture mapping we apply image data to a geometric primitive

  2. Basic strategy Three steps to apply a texture 1. Specify the texture • read or generate image • assign to texture • enable texturing 2. Specify texture parameters • wrapping, filtering 3. Assign texture coordinates to vertices • Proper mapping function is left to application

  3. Texture Mapping

  4. OpenGL pipline • Images and geometry flow through separate pipelines that join at the rasterizer - “complex” textures do not affect geometric complexity

  5. Specifying a Texture Image • Define a texture image from an array of texels (texture elements) in CPU memory Glubytemy_texels[512][512][3]; • Enable texture mapping • glEnable(GL_TEXTURE_2D) • OpenGL supports 1-3 dimensional texture maps

  6. Create Texture Objects • Define a handle to different available texture states (image and params) glGenTextures(1, &texture[texture_num]) • First argument tells OpenGL how many texture objects we would create • Second argument is a pointer to the place where OpenGL will store the names (unsigned integers) of the texture objects • Texture[ ] is of type GLuint

  7. Binding to a texture object • To specify the text object that we are going to define its specifics glBindTexture(GL_TEXTURE_2D, texture[texture_num])

  8. Define image as texture glTexImage2D( target, level, internalFormat, w, h, border, format, type, texels ) target: type of texture, e.g. GL_TEXTURE_2D level: used for mipmapping (discussed later) internalFormat: elements per texel w, h: width and height of texture image border: used for smoothing (discussed later) format and type: describe texels texels: pointer to texel array glTexImage2D(GL_TEXTURE_2D, 0, GL_RGB, 512, 512, 0, GL_RGB, GL_UNSIGNED_BYTE, my_texels);

  9. 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_inis source image • data_outis for destination image • Image interpolated and filtered during scaling

  10. Mapping a texture • Once a texture is uploaded to the graphics card, its resolution has no importance • Texture is mapped to “texture coordinates” between 0.0 to 1.0 (s,t) • glTexCoord*()specified at each vertex Object Space Texture 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

  11. Typical code

  12. Texture parameters • OpenGL a variety of parameter that determine how texture is applied • Wrapping parameters determine what happens if s and t are outside the (0,1) range • Filter modes allow us to use area averaging instead of point samples • Mipmappingallows us to use textures at multiple resolutions • Environment parameters determine how texture mapping interacts with shading

  13. Wrapping mode glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP ) glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT )

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

  15. Texture Polygon Texture Polygon Magnification Minification Magnification and Minification A group of texels can cover a pixel (minification) or One texel can cover a group of pixels (magnification) Can use point sampling (nearest texel) or linear filtering ( 2 x 2 filter) to obtain texture values

  16. NN interpolation

  17. Bilinear interpolation

  18. Mipmapped textures • Texturing far/close objects • Mipmapping allows for pre-filtered 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 image gluBuild*DMipmaps( … )

  19. N/4*N/4 N/2*N/2 N*N Mipmapping What about memory ?

  20. Texture functions • Controls how texture is applied glTexEnv{fi}(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE, param) • GL_TEXTURE_ENV_MODEmodes • GL_MODULATE: modulates with computed shade • GL_BLEND: blends with an environmental color • GL_REPLACE: use only texture color • GL_DECAL: alpha value is considered

  21. Typical Code void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); makeCheckImages(); glGenTextures(2, texName); glBindTexture(GL_TEXTURE_2D, texName[0]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, checkImage);

  22. Typical Code – (cont’d) glBindTexture(GL_TEXTURE_2D, texName[1]); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER,GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_NEAREST); glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL); glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, checkImageWidth, checkImageHeight, 0, GL_RGBA, GL_UNSIGNED_BYTE, otherImage); glEnable(GL_TEXTURE_2D); }

  23. Typical Code – (cont’d) void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glBindTexture(GL_TEXTURE_2D, texName[0]); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(-2.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(-2.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(0.0, 1.0, 0.0); glTexCoord2f(1.0, 0.0); glVertex3f(0.0, -1.0, 0.0); glEnd(); glBindTexture(GL_TEXTURE_2D, texName[1]); glBegin(GL_QUADS); glTexCoord2f(0.0, 0.0); glVertex3f(1.0, -1.0, 0.0); glTexCoord2f(0.0, 1.0); glVertex3f(1.0, 1.0, 0.0); glTexCoord2f(1.0, 1.0); glVertex3f(2.41421, 1.0, -1.41421); glTexCoord2f(1.0, 0.0); glVertex3f(2.41421, -1.0, -1.41421); glEnd(); glFlush(); }

  24. OFF files • OFF files are standard format to represent 3D model • Starts with number of points, then number of polygons ( usually triangles ) • List of points • List of polygons – <# points of polygon>< index of points> • Easy to write OFF file reader and draw these models.

  25. Assignment2

More Related