A single texture can span many polygons
To make everything match, corresponding vertices (ones with the same glVertex coordinates) should use the same texture coordinates
Midterm will be on Thursday, October 27, in class.
Will cover all topics up through this week (next class).
Open book, open notes.
DUE: Tuesday, 1 November 2005, 11:59:59 pm
(via e-mail, to depape@buffalo.edu)
Create a program that uses textures and blending
The program should use at least 2 distinct texture images.
At least one textured object in the scene should be something that you assign texture coordinates to yourself (i.e. you have to make some calls to glTexCoord).
You may use my example Texture2D code, or you may write your own, to handle creating the textures.
For the blending part, you can use it however you like - alpha in a texture,
alpha in a color, the "standard" BlendFunc, or some other type of
blending.
Extra credit will be given for dynamic textures - e.g.:
alpha | |
---|---|
1.0 | fully opaque |
0.5 | half transparent |
0.0 | fully transparent |
Most common method:
e.g. if alpha is 0.25: |
R = 0.25 * R1 + 0.75 * R2
G = 0.25 * G1 + 0.75 * G2 B = 0.25 * B1 + 0.75 * B2 |
Many different formulas for blending colors can be used
Formula is defined by glBlendFunc() function
is defined by:
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Enable blending | glEnable(GL_BLEND) | |
Set the blending function | glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) | |
Assign alpha < 1 | glColor4f(1, 0, 0, 0.5) |
BlendFunc is applied to pixels as they are drawn - blending incoming color with color in the frame buffer
Example: alpha.py
Alpha is treated like any other color component
If alpha differs at each vertex,
it will be smoothly interpolated.
Can give objects soft edges.
Examples: smoothAlpha.py alphawheel.py
Changing alpha over time can make an object a fade in or out
Example: fade.py
Use 4 channel texture image
Can be used to "cut out" a texture image - creates complex shapes with simple geometry
RGB | Alpha | ||
---|---|---|---|
Example: texalpha.py
addalpha.py can combine an RGB color image with a greyscale alpha image into a single file, for use as a texture
Output file should be TIFF, for 4-channel support
Used in film & video to composite live actors with other imagery (video or digital)
e.g. TV weatherman, Star Wars virtual sets
Can be done digitally by finding a background color, and setting alpha to 0 for those pixels
Example code: chromakey.py
General blending formula is:
(Rs, Gs, Bs) is the
source color (object being drawn)
(Rd, Gd, Bd) is the
destination color (color already in the framebuffer)
SourceFactor and DestinationFactor are defined by glBlendFunc()
Factor name | Computed factor |
---|---|
GL_ZERO | 0 |
GL_ONE | 1 |
GL_SRC_ALPHA | As |
GL_ONE_MINUS_SRC_ALPHA | 1 - As |
GL_DST_ALPHA | Ad |
GL_ONE_MINUS_DST_ALPHA | 1 - Ad |
GL_CONSTANT_ALPHA | Ac |
GL_ONE_MINUS_CONSTANT_ALPHA | 1 - Ac |
GL_SRC_COLOR | (Rs, Gs, Bs) |
GL_ONE_MINUS_SRC_COLOR | (1 - Rs, 1 - Gs, 1 - Bs) |
GL_DST_COLOR | (Rd, Gd, Bd) |
GL_ONE_MINUS_DST_COLOR | (1 - Rd, 1 - Gd, 1 - Bd) |
GL_CONSTANT_COLOR | (Rc, Gc, Bc) |
GL_ONE_MINUS_CONSTANT_COLOR | (1 - Rc, 1 - Gc, 1 - Bc) |
GL_SRC_ALPHA_SATURATE | min(As, 1 - Ad) |
Blending can be used to apply a color filter to the whole scene
Draw a square that covers the entire window, with the appropriate blending function
# Dim the scene glBlendFunc(GL_ZERO, GL_SRC_ALPHA) glColor4f(1.0, 1.0, 1.0, 0.5) |
Example: filter.py
# Apply a purple filter glBlendFunc(GL_ZERO, GL_SRC_COLOR) glColor4f(1.0, 0.0, 0.5, 1.0) | |
# Invert all the colors glBlendFunc(GL_ONE_MINUS_DST_COLOR, GL_ZERO) glColor4f(1.0, 1.0, 1.0, 1.0) |
DUE: Tuesday, 1 November 2005, 11:59:59 pm
(via e-mail, to depape@buffalo.edu)
Create a program that uses textures and blending
The program should use at least 2 distinct texture images.
At least one textured object in the scene should be something that you assign texture coordinates to yourself (i.e. you have to make some calls to glTexCoord).
You may use my example Texture2D code, or you may write your own, to handle creating the textures.
For the blending part, you can use it however you like - alpha in a texture,
alpha in a color, the "standard" BlendFunc, or some other type of
blending.
Extra credit will be given for dynamic textures - e.g.: