Download Lecture notes

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts

Charge-coupled device wikipedia , lookup

Stereoscopy wikipedia , lookup

Edge detection wikipedia , lookup

Subpixel rendering wikipedia , lookup

Anaglyph 3D wikipedia , lookup

List of 8-bit computer hardware palettes wikipedia , lookup

Solid modeling wikipedia , lookup

General-purpose computing on graphics processing units wikipedia , lookup

Framebuffer wikipedia , lookup

Stereo display wikipedia , lookup

Apple II graphics wikipedia , lookup

Image editing wikipedia , lookup

Original Chip Set wikipedia , lookup

BSAVE (bitmap format) wikipedia , lookup

Indexed color wikipedia , lookup

Hold-And-Modify wikipedia , lookup

2.5D wikipedia , lookup

Rendering (computer graphics) wikipedia , lookup

Spatial anti-aliasing wikipedia , lookup

InfiniteReality wikipedia , lookup

Transcript
Last Time
• Shading Interpolation
• Texture Mapping introduction
11/7/2002
(c) University of Wisconsin, CS 559
Today
• Texture Mapping details
• Modeling Intro (maybe)
• Homework 5
11/7/2002
(c) University of Wisconsin, CS 559
Basic OpenGL Texturing
• Specify texture coordinates for the polygon:
– Use glTexCoord2f(s,t) before each vertex:
• Eg: glTexCoord2f(0,0); glVertex3f(x,y,z);
• Create a texture object and fill it with texture data:
– glGenTextures(num, &indices) to get identifiers for the objects
– glBindTexture(GL_TEXTURE_2D, identifier) to bind the texture
• Following texture commands refer to the bound texture
– glTexParameteri(GL_TEXTURE_2D, …, …) to specify parameters
for use when applying the texture
– glTexImage2D(GL_TEXTURE_2D, ….) to specify the texture data
(the image itself)
MORE…
11/7/2002
(c) University of Wisconsin, CS 559
Basic OpenGL Texturing (cont)
• Enable texturing: glEnable(GL_TEXTURE_2D)
• State how the texture will be used:
– glTexEnvf(…)
• Texturing is done after lighting
• You’re ready to go…
11/7/2002
(c) University of Wisconsin, CS 559
Nasty Details
• There are a large range of functions for controlling the
layout of texture data:
– You must state how the data in your image is arranged
– Eg: glPixelStorei(GL_UNPACK_ALIGNMENT, 1) tells
OpenGL not to skip bytes at the end of a row
– You must state how you want the texture to be put in memory: how
many bits per “pixel”, which channels,…
• Textures must be square with width/height a power of 2
– Common sizes are 32x32, 64x64, 256x256
– Smaller uses less memory, and there is a finite amount of texture
memory on graphics cards
11/7/2002
(c) University of Wisconsin, CS 559
Controlling Different Parameters
• The “pixels” in the texture map may be interpreted as many
different things. For example:
– As colors in RGB or RGBA format
– As grayscale intensity
– As alpha values only
• The data can be applied to the polygon in many different
ways:
– Replace: Replace the polygon color with the texture color
– Modulate: Multiply the polygon color with the texture color or
intensity
– Similar to compositing: Composite texture with base color using
operator
11/7/2002
(c) University of Wisconsin, CS 559
Example: Diffuse shading and
texture
• Say you want to have an object textured and have the
texture appear to be diffusely lit
• Problem: Texture is applied after lighting, so how do you
adjust the texture’s brightness?
• Solution:
–
–
–
–
11/7/2002
Make the polygon white and light it normally
Use glTexEnvi(GL_TEXTURE_2D, GL_TEXTURE_ENV_MODE, GL_MODULATE)
Use GL_RGB for internal format
Then, texture color is multiplied by surface (fragment) color, and
alpha is taken from fragment
(c) University of Wisconsin, CS 559
Some Other Uses
• There is a “decal” mode for textures, which replaces the
surface color with the texture color, as if you stick on a
decal
– Texture happens after lighting, so the light info is lost
– BUT, you can use the texture to store lighting info, and generate
better looking lighting (override OpenGL’s lighting)
• You can put the color information in the polygon, and use
the texture for the brightness information
– Called “light maps”
– Normally, use multiple texture layers, one for color, one for light
11/7/2002
(c) University of Wisconsin, CS 559
Textures and Aliasing
• Textures are subject to aliasing:
– A polygon pixel maps into a texture image, essentially sampling the
texture at a point
– The situation is very similar to resizing an image, but the resize
ratios may change across the image
• Standard approaches:
– Pre-filtering: Filter the texture down before applying it
– Post-filtering: Take multiple pixels from the texture and filter them
before applying to the polygon fragment
11/7/2002
(c) University of Wisconsin, CS 559
Point Sampled Texture Aliasing
Texture map
Polygon far from the viewer
in perspective projection
Rasterized and textured
• Note that the back row is a very poor representation of the
true image
11/7/2002
(c) University of Wisconsin, CS 559
Mipmapping (Pre-filtering)
• If a textured object is far away, one screen pixel (on an
object) may map to many texture pixels
– The problem is: how to combine them
• A mipmap is a low resolution version of a texture
– Texture is filtered down as a pre-processing step:
• gluBuild2DMipmaps(…)
– When the textured object is far away, use the mipmap chosen so that
one image pixel maps to at most four mipmap pixels
– Full set of mipmaps requires double the storage of the original
texture
11/7/2002
(c) University of Wisconsin, CS 559
Many Texels for Each Pixel
Texture map with pixels
drawn on it.
Some pixels cover many
texture elements (texels)
11/7/2002
Polygon far from the viewer
in perspective projection
(c) University of Wisconsin, CS 559
Mipmaps
For far objects
For middle objects
For near objects
11/7/2002
(c) University of Wisconsin, CS 559
Mipmap Math
• Define a scale factor, =texels/pixel
–
–
–
–
A texel is a pixel from a texture
 is actually the maximum from x and y
The scale factor may vary over a polygon
It can be derived from the transformation matrices
• Define =log2 
•  tells you which mipmap level to use
– Level 0 is the original texture, level 1 is the next smallest texture,
and so on
– If <0, then multiple pixels map to one texel: magnification
11/7/2002
(c) University of Wisconsin, CS 559
Post-Filtering
• You tell OpenGL what sort of post-filtering to do
• Magnification: When <0 the image pixel is smaller than the texel:
–
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, type)
– Type is GL_LINEAR or GL_NEAREST
• Minification: When >0 the image pixel is bigger than the texel:
– GL_TEX_MIN_FILTER
– Can choose to:
• Take nearest point in base texture, GL_NEAREST
• Linearly interpolate nearest 4 pixels in base texture, GL_LINEAR
• Take the nearest mipmap and then take nearest or interpolate in that mipmap,
GL_NEAREST_MIPMAP_LINEAR
• Interpolate between the two nearest mipmaps using nearest or interpolated
points from each, GL_LINEAR_MIPMAP_LINEAR
11/7/2002
(c) University of Wisconsin, CS 559
Filtering Example
Level 2
NEAREST_MIPMAP_NEAREST:
level 0, pixel (0,0)
Level 1
LINEAR_MIPMAP_NEAREST:
level 0, pixel (0,0) * 0.51
+ level 1, pixel (0,0) * 0.49
Level 0
NEAREST_MIPMAP_LINEAR:
level 0, combination of
pixels (0,0), (1,0), (1,1), (0,1)
11/7/2002
s=0.12,t=0.1
=1.4
=0.49
(c) University of Wisconsin, CS 559
Boundaries
• You can control what happens if a point maps to a texture
coordinate outside of the texture image
– All texture images are assumed to go from (0,0) to (1,1) in texture
space
– The problem is how to extend the image to make an infinite space
• Repeat: Assume the texture is tiled
–
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT)
• Clamp to Edge: the texture coordinates are truncated to
valid values, and then used
–
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP)
• Can specify a special border color:
–
11/7/2002
glTexParameterfv(GL_TEXTURE_2D, GL_TEXTURE_BORDER_COLOR, R,G,B,A)
(c) University of Wisconsin, CS 559
Repeat Border
(1,1)
(0,0)
11/7/2002
(c) University of Wisconsin, CS 559
Clamp Border
(1,1)
(0,0)
11/7/2002
(c) University of Wisconsin, CS 559
Border Color
(1,1)
(0,0)
11/7/2002
(c) University of Wisconsin, CS 559
Other Texture Stuff
• Texture must be in fast memory - it is accessed for every
pixel drawn
– If you exceed it, performance will degrade horribly
– Skilled artists can pack textures for different objects into one
image
• Texture memory is typically limited, so a range of
functions are available to manage it
• Specifying texture coordinates can be annoying, so there
are functions to automate it
• Sometimes you want to apply multiple textures to the same
point: Multitexturing is now in most new hardware
11/7/2002
(c) University of Wisconsin, CS 559
Yet More Texture Stuff
• There is a texture matrix: apply a matrix transformation to
texture coordinates before indexing texture
• There are “image processing” operations that can be applied
to the pixels coming out of the texture
• There are 1D and 3D textures
– Mapping works essentially the same
– 3D textures are very memory intensive, and how they are used is
very application dependent
– 1D saves memory if the texture is inherently 1D, like stripes
11/7/2002
(c) University of Wisconsin, CS 559
Procedural Texture Mapping
• Instead of looking up an image, pass the texture coordinates
to a function that computes the texture value on the fly
– Renderman, the Pixar rendering language, does this
– Available in a limited form with vertex shaders on current
generation hardware
• Advantages:
– Near-infinite resolution with small storage cost
– Idea works for many other things
• Has the disadvantage of being slow in many cases
11/7/2002
(c) University of Wisconsin, CS 559
Other Types of Mapping
• Environment mapping looks up incoming illumination in a
map
– Simulates reflections from shiny surfaces
• Bump-mapping computes an offset to the normal vector at
each rendered pixel
– No need to put bumps in geometry, but silhouette looks wrong
• Displacement mapping adds an offset to the surface at each
point
– Like putting bumps on geometry, but simpler to model
• All are available in software renderers like RenderMan
compliant renderers
• All these are becoming available in hardware
11/7/2002
(c) University of Wisconsin, CS 559
The Story So Far
• We’ve looked at images and image manipulation
• We’ve looked at rendering from polygons
• Next major section:
– Modeling
11/7/2002
(c) University of Wisconsin, CS 559
Modeling Overview
• Modeling is the process of describing an object
• Sometimes the description is an end in itself
– eg: Computer aided design (CAD), Computer Aided Manufacturing
(CAM)
– The model is an exact description
• More typically in graphics, the model is then used for
rendering (we will work on this assumption)
– The model only exists to produce a picture
– It can be an approximation, as long as the visual result is good
• The computer graphics motto: “If it looks right it is right”
– Doesn’t work for CAD
11/7/2002
(c) University of Wisconsin, CS 559
Issues in Modeling
• There are many ways to represent the shape of an
object
• What are some things to think about when choosing
a representation?
11/7/2002
(c) University of Wisconsin, CS 559
Categorizing Modeling Techniques
• Surface vs. Volume
– Sometimes we only care about the surface
• Rendering and geometric computations
– Sometimes we want to know about the volume
• Medical data with information attached to the space
• Some representations are best thought of defining the space filled,
rather than the surface around the space
• Parametric vs. Implicit
– Parametric generates all the points on a surface (volume) by
“plugging in a parameter” eg (sin cos, sin sin, cos)
– Implicit models tell you if a point in on (in) the surface (volume) eg
x2 + y2 + z2- 1 = 0
11/7/2002
(c) University of Wisconsin, CS 559
Techniques We Will Examine
• Polygon meshes
– Surface representation, Parametric representation
• Prototype instancing and hierarchical modeling
– Surface or Volume, Parametric
• Volume enumeration schemes
– Volume, Parametric or Implicit
• Parametric curves and surfaces
– Surface, Parametric
• Subdivision curves and surfaces
• Procedural models
11/7/2002
(c) University of Wisconsin, CS 559