Gholamhossein Tavasoli @ ZNU

Transcription

Gholamhossein Tavasoli @ ZNU
Gholamhossein Tavasoli @ ZNU
 Texture mapping
 Implemented in hardware on every GPU
 Simplest surface detail hack, dating back to the ‘60s GE flight
simulator and its terrain generator
 Technique:
 “Paste” photograph or bitmap (the texture, for example: a brick
pattern, a wood grain pattern, a sky with clouds) on a surface to
add detail without adding more polygons.
 Map texture onto the surface, get the surface color or alter the
object’s surface color
 Think of texture map as stretchable contact paper
 How do we add more detail to a model?
 Add more detailed geometry; more, smaller triangles:
 Pros: Responds realistically to lighting, other surface interaction
 Cons: Difficult to generate, takes longer to render, takes more memory space
 Map a texture to a model:
 Pros: Can be stored once and reused, easily compressed to reduce size, rendered very quickly,
very intuitive to use, especially useful on far-away objects, terrain, sky,…
 Cons: Very crude approximation of real life. Texture mapped but otherwise unaltered surfaces
still look smooth.
 What can you put in a texture map?
 Diffuse, ambient, specular, or any kind of color
 Specular exponents, transparency or reflectivity coefficients
 Surface normal data (for normal mapping or bump mapping)
 Projected reflections or shadows
 A texture is just a bitmap image
 2D array - texture[height][width][4]
 Pixels of the texture are called texels
 Texture coordinates are in 2D, in the range [0,1]
 A technique to handle variations of reflectance properties of an object surface
by storing the reflectance as a function or a pixel-based image and
“mapping” it onto a surface.
 The image is called a texture map
 The texture map is defied in its own coordinate system, parameterized by (u, v)
 Assign (u, v) coordinates to the vertices of surface triangles
 For each pixel inside a triangle, calculate its texture coordinates using
barycentric interpolation on the triangle vertices’ texture coordinates
 Using the pixel texture coordinates, use bilinear interpolation in the texture
map to find the pixel’s color
 Steps in Texture Mapping
 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
 Loading image file as texture with Qt
void glBindTexture(GLenum target, GLuint textureName);
 When using the textureName of an unsigned integer other than
zero for the first time, a new texture object is created and
assigned that name
 When binding to a previously created texture object, that texture
object becomes active
 When binding to a textureName value of zero, OpenGL stops
using texture objects and returns to the unnamed default texture.
void glDeleteTextures(GLsizei n, const GLuint *textureNames);
 Deletes n texture objects, named by elements in the array
textureNames.
 You must provide both object coordinates and texture
coordinates for each vertex.
 The texture coordinates determine which texel in the
texture map is assigned to that vertex.
 Texture coordinates are interpolated between vertices
 Textures are rectangular arrays of data
 In exactly the same way that colors are interpolated between two
vertices of shaded polygons and lines
void glTexCoord{1234}{sifd}(TYPE coords);
void glTexCoord{1234}{sifd}v(TYPE *coords);
 Sets the current texture coordinates (u,v, w, q)
 Subsequent calls to glVertex*() result in those vertices being
assigned the current texture coordinates.
 Using glTexCoord2*() allows you to specify u and v; u and v are
set to 0 and 1, respectively
 You need to enable texturing before drawing your scene.
 glEnable(GL_TEXTURE_2D)
 glDisable(GL_TEXTURE_2D)
 Supplying Both Texture and Geometric Coordinates
 For a two-dimensional texture map
 the texture coordinates range from 0.0 to 1.0 in both directions, but the coordinates of the items being
textured can be anything
 (0,0) is conventionally the bottom-left corner
 (1,1) is the top-right corner of the texture image
 Wrapping
 The texture should be sampled when a coordinate outside the range of 0 to 1 is given
 GL_REPEAT
 GL_MIRRORED_REPEAT
 GL_CLAMP_TO_EDGE
 GL_CLAMP_TO_BORDER
 The clamping can be set per coordinate, where the equivalent of (x,y,z) in texture coordinates
is called (s,t,r)
 Texture parameter are changed with the glTexParameter* functions
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);