Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL Texture Mapping Holmes Chiou 2002 Introduction Texture mapping allows you to glue an image of a brick wall to a polygon and to draw the entire.

Similar presentations


Presentation on theme: "OpenGL Texture Mapping Holmes Chiou 2002 Introduction Texture mapping allows you to glue an image of a brick wall to a polygon and to draw the entire."— Presentation transcript:

1

2 OpenGL Texture Mapping Holmes Chiou 2002

3 Introduction Texture mapping allows you to glue an image of a brick wall to a polygon and to draw the entire wall as a single polygon

4 Introduction Create a texture object and specify a texture for that object Indicate how the texture is to be applied to each pixel Enable texture mapping Draw the scene, supplying both texture and geometric coordinates

5 Introduction static GLuint texName[1]; glPixelStorei(GL_UNPACK_ALIGNMENT, 1); glGenTextures(1, 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, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, texImage32 ); glEnable(GL_TEXTURE_2D);

6 Texture Object -1 New concept in OpenGL 1.1 Operate texture as an object Steps to use texture object Generate texture names Bind texture objects to texture data & parameters Rebind the texture objects for applying

7 Texture Object -2 Naming a texture object void glGenTextures(GLsizei n, GLuint *textureNames); glIsTexture() determines if a texture name is actually in use

8 Texture Object -3 Bind a texture name to a texture object void glBindTexture(GLenum target, GLuint textureName); Cleaning up texture objects void glDeleteTextures(GLsizei n, const GLuint *textureNames);

9 Specifying Texture void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *pixels); Ref. OpenGL Programming Guide for parameters detail glPixelStorei(GL_UNPACK_ALIGNMENT, 1); Ex: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, texImage32);

10 Mip-Mapping -1 Multi-resolution texture Specified in the “ level ” parameter in glTexImage2D*

11 Mip-Mapping -2 For example: glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, 32, 32, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage32); glTexImage2D(GL_TEXTURE_2D, 1, GL_RGBA, 16, 16, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage16); glTexImage2D(GL_TEXTURE_2D, 2, GL_RGBA, 8, 8, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage8); glTexImage2D(GL_TEXTURE_2D, 3, GL_RGBA, 4, 4, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage4); glTexImage2D(GL_TEXTURE_2D, 4, GL_RGBA, 2, 2, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage2); glTexImage2D(GL_TEXTURE_2D, 5, GL_RGBA, 1, 1, 0, GL_RGBA, GL_UNSIGNED_BYTE, mipmapImage1);

12 Mip-Mapping -3 Using GLU helper int gluBuild2DMipmaps(GLenum target, GLint components, GLint width, GLint height, GLenum format, GLenum type, void *data); gluBuild2DMipmaps( GL_TEXTURE_2D, 3, 32, 32, GL_RGB, GL_UNSIGNED_BYTE, texImage32 );

13 Filtering -1 Magnification & Minification Using glTexParameter*() glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);

14 Filtering -2

15 Texture Function -1 void glTexEnv{if}[v](GLenum target, GLenum pname, TYPE param); target must be GL_TEXTURE_ENV If pname is GL_TEXTURE_ENV_MODE, param can be GL_DECAL, GL_REPLACE, GL_MODULATE, GL_BLEND If pname is GL_TEXTURE_ENV_COLOR, param is a color array. These values are used only if the GL_BLEND texture function has been specified

16 Texture Function -2

17 Texture Function -3

18 Assigning Texture Coordinates void glTexCoord{1234}{sifd}(TYPEcoords); void glTexCoord{1234}{sifd}v(TYPE *coords); glTexCoord2f( 0.5, 0.5 ); Texture Matrix Stack glMatrixMode( GL_TEXTURE ); Not mentioned here …

19 Repeating and Clamping Texture -1 Using glTexParameter*( … ); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP); Repeating a texture

20 Repeating and Clamping Texture -2 Clamping a texture Repeating and Clamping a texture

21 Texture Parameters

22 Automatic Texture-Coordinate Generation -1 void glTexGen{ifd}(GLenum coord, GLenum pname, TYPEparam); void glTexGen{ifd}v(GLenum coord, GLenum pname, TYPE *param); coord can be GL_S, GL_T, GL_R, GL_Q If pname is GL_TEXTURE_GEN_MODE, param is either GL_OBJECT_LINEAR, GL_EYE_LINEAR, GL_SPHERE_MAP If pname is GL_OBJECT_PLANE or GL_EYE_PLANE, param is the plane coefficients array Ex: plane equation is 1x + 2y + 3z = 0 GLfloat plane[4] = { 1, 2, 3, 0 };

23 Automatic Texture-Coordinate Generation -2 (a) The texture contour stripes are parallel to the plane x = 0, (GL_OBJECT_LINEAR). As the object moves, the texture appears to be attached to it. (b) A different planar equation (x + y + z = 0) is used, so the stripes have a different orientation. (c) The texture coordinates are calculated relative to eye coordinates and hence aren't fixed to the object (GL_EYE_LINEAR). As the object moves, it appears to "swim" through the texture

24 Automatic Texture-Coordinate Generation -3 Environment Mapping To automatically generate the texture coordinates to support environment mapping, use this code in your program: glTexGeni(GL_S, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glTexGeni(GL_T, GL_TEXTURE_GEN_MODE, GL_SPHERE_MAP); glEnable(GL_TEXTURE_GEN_S); glEnable(GL_TEXTURE_GEN_T); The GL_SPHERE_MAP constant creates the proper texture coordinates for the environment mapping.

25 Automatic Texture-Coordinate Generation -4 Sphere map: Ref. OpenGL Programming Guide, Chapter 9 for more detail …

26 Any Question? ?


Download ppt "OpenGL Texture Mapping Holmes Chiou 2002 Introduction Texture mapping allows you to glue an image of a brick wall to a polygon and to draw the entire."

Similar presentations


Ads by Google