Presentation is loading. Please wait.

Presentation is loading. Please wait.

OpenGL Texture Mapping

Similar presentations


Presentation on theme: "OpenGL Texture Mapping"— Presentation transcript:

1 OpenGL Texture Mapping
Holmes Chiou 2002

2 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

3 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

4 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);

5 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

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

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

8 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);

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

10 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);

11 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 );

12 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);

13 Filtering -2

14 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

15 Texture Function -2

16 Texture Function -3

17 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…

18 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

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

20 Texture Parameters

21 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 };

22 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

23 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.

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

25 Any Question? ?


Download ppt "OpenGL Texture Mapping"

Similar presentations


Ads by Google