280 likes | 313 Views
Understand the math and implementation of texture mapping in OpenGL, including procedural and image textures. Explore topics like texture space, transformations, tiling, filtering, lighting, and screen vs. world space interpolation. Delve into the nuances of texture mapping techniques for realistic visual rendering.
E N D
CAP4730: Computational Structures in Computer Graphics Texture Mapping
Outline • What is texture mapping? • Math behind texture mapping • OpenGL texture mapping • Advanced Topics in texture mapping
Marching towards Visual Realism http://www.3drender.com/jbirn/productions.html
Using only Triangles • Using only triangles to model everything is hard • Think about a label on a soup can • Instead of interpolating colors, map a pattern • Run Demo • How do you create a pattern?
Texture • A color array that holds an image • Similar to a framebuffer • gluint buffer[x*y*3] • 255 0 255
Procedural Texture • Calculate pixel values via functions
Image Textures Load pixel values from a file
Texture Space • How would you store this in your program? • How much memory? s s = [0…1] t = [0…1] t
Object Space (u1,v1) (u0,v0) s Texture -> Object Transformation s = [0…1] t = [0…1] u = [0…1] v = [0…1] (u3,v3) t (u2,v2)
Going from pixels to textures Object -> Texture Transformation Image -> Object Transformation (x,y) (s,t) (u,v)
What is the question? • A pixel (x,y) corresponds to what texture element (s,t)? • Q: How do we convert (s,t) into texture element coordinates? • TEXture Elements (TEXELS) • A: Linearly Interpolate texture coordinates! • http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide05.html
Tiling • Let’s look at the texture coordinates (u1,v1) (u0,v0) s (u3,v3) t (u2,v2)
0,0 2,0 2,2 0,2 Textures built to Tile • Think Windows Background • Why would you want this? Discuss the Pros and Cons of tiling. • Look at code 0,0 1,0 0,1 1,1
Filtering • Why does this happen? (u0,v0) (u1,v1) (u2,v2)
Filtering • Why does this happen? • What are some alternatives? (ui,vi) (uj,vj)
Combining Lighting + Texturing • If you notice there is no lighting involved with texture mapping! • They are independent operations, which MAY (you decide) be combined • It all depends on how you “apply” the texture to the underlying triangle
Combining Lighting + Texturing • CT = Texture Color • CC = Base Triangle • Replace, CF = CT • Blend, CF = CT * CC • OpenGL: • glTexEnv(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_BLEND); • http://trant.sgi.com/opengl/docs/man_pages/hardcopy/GL/html/gl/texenv.html
Screen space vs. world space P0(x,y,z) V0(x,y) V1(x,y) P1(x,y,z)
Interpolation in Screen Space P0(x,y,z) V0(x’,y’) V1(x’,y’) P1(x,y,z) z’=1
Interpolation in World Space P0(x,y,z) V0(x’,y’) V1(x’,y’) P1(x,y,z) z’=1
Comparing the two • What do we need to interpolate in screen space now? • What happens if we don’t have Z? What have we discussed that doesn’t have Z? • Perspectively Correct Z • http://graphics.lcs.mit.edu/classes/6.837/F98/Lecture21/Slide14.html
Other solutions • Cost of screen space interpolation now? • Increase # of triangles
Linear Interpolation is wrong? • Gouraud is wrong, but why does it look okay? • Q: Why does Texture mapping not look right even though we are doing the same thing? • A: All about the slope of the interpolation and the “gradualness” or “abruptness” of the change
Transparencies • We will revisit this later, but we can use the alpha channel to stencil out textures. • Thus per pixel, set alpha = 1 or alpha = 0. Where alpha = 0,
Let’s Look at some games • Pick a favorite game from the class