These notes are some questions to think about to help you prepare
for the final exam. 
DO NOT TURN ANYTHING IN! We will not look at or grade
anything. We will find out if you took this seriously by looking at
your exams.
Some notes about the final:
   - It will be on Sunday, December 19th at 10:05 A.M. in room 1221
   CS&S.
 
   
   - It will be closed book and closed notes. You may bring a
   calculator, but you shouldn't need it.
 
   
   - It will cover the entire syllabus of the course. Anything that
   we've spoken about in class or that has been assigned in the
   reading is fair game.
 
A couple of hints:
We do not expect you to memorize formulas. However, you should
understand what different things mean.
We will not expect you to do complex calculations by hand. Our
goal is to produce an exam that you will not need a calculator
for.
Because of the time pressures on grading, we will probably try to
create questions that are easy to grade. Don't expect essay
questions.
You might want to look around at other university's courses for
more review materials. Each course is slightly different, both in
content and difficulty. Mark Levoy's class at Stanford has some
great
resources for exam study (remember, he has 4 TAs for 80
students!).
The questions here are meant to get you to think about the topics
(and tend to be open ended essay type things). I've tried to organize
it by the order we covered things in the course, with a few
exceptions. No guarantees on this being complete. You should check
the course syllabus and your notes to remind yourself what topics we
covered.
We will expect you to know what the important algorithms for
graphics are, what they do, and why they might be used. For example,
you should know that Bresenham's line-drawing algorithm allows lines
to be drawn into a frame buffer using only integer calculations
without division, and is therefore more appropriate for hardware
implementations than other algorithms. We wouldn't expect you to
remember the exact details of the implicit formulas inside of the
algorithm.
We will NOT test you on FlTk.
1. Imaging
   - How do we perceive images? How does this effect how we create
   images?
 
   
   -  
 
   
   - What is gamma correction? Why do we need it?
 
   
   -  
 
   
   - How do we perceive color? How does this impact how we display
   images?
 
   
   - You should be sure to understand the concept of gamut.
 
   
   - How do we store and represent color? What are the different
   "color systems" that are used in computer graphics? Why would we
   need more than one? 
 
   
   -  
 
   
   - What is quantization? How does it effect image display? How do
   we deal with it?
 
   
   - You should have some understanding of the algorithms for
   displaying quantized images, such as half-toning and dithering. We
   won't ask you to do Floyd Steinberg by hand again.
 
   
   - What is the persistence of vision? Why is it important to
   graphics display design?
 
   
   -  
 
   
   - What are the cues that cause us to perceive things in 3D?
 
   
   -  
 
   
   - What does it mean to sample an image correctly? What happens
   when you don't? How do we apply filtering in the sampling
   operations?
 
   
   - You don't need to memorize convolution kernels, but be sure to
   understand the intuitions of sampling!
 
   
   - What is compositing? How do we do it? What is it useful
   for?
 
   
   - We will not expect you to memorize what all of the Porter Duff
   operators are, but we might ask you to know what the outcome will
   be for the most common ones. Or at least to be able to interpret
   the blending functions.
 
   
   - What is the alpha channel? What is it useful for? How might we
   obtain it? What is pre-multiplied alpha?
 
   
   - Don't memorize the blue-screening equations! You should have
   some intuitions for why its hard.
 
2. Graphics "Basics"
   - What are the key algorithms for rasterization? When are they
   used?
 
   
   - You should know what algorithms are appropriate for which
   tasks, but we will not expect you to remember the details of how
   each is implemented. Know key features (like the Bresenham's
   algorithms don't use division).
 
   
   - What are the different mechanisms for storing graphics state?
   What is the difference between immediate mode and retained mode
   graphics architectures? When would a retained mode architecture be
   more appropraite? 
 
   
   - We brushed over this. OpenGL is generally immediate mode, with
   state retained on a stack. Things get drawn when you draw each object.
   Retained mode just keeps stuff in storage until you say "draw."
   Retained mode is NOT the same as double buffering (understand why
   they are different, and why they might seem the same to the
   programmer/user).
 
3. Transformations and Graphics Math
The concept of a coordinate system and coordinate transformations
are key!
   - What are the common types of transformations used in graphics?
   Which are linear? 
 
   
   - We won't expect you to memorize the matrices. But do
   understand what the different transforms do!
 
   
   - What are homogeneous coordinates? Why do we use them? How do
   we use them? 
 
   
   -  
 
   
   - Why do we use matrix representations of transformations? How
   do we use them? Why is a matrix stack useful?
 
   
   -  
 
   
   - What happens when a sequence of transformations are applied to
   an object.
 
   
   -  
 
   
   - How do we use transformations to create hierarchical (or
   grouped) objects? How is the graphics stack applied to this?
 
   
   -  
 
   
   - How do we represent rotations in 3D? What are Euler Angles?
   What happens when we perform multiple rotations in succession?
   What are the pros and cons of the Euler Angles representation?
   What are the alternatives? 
 
   
   - We didn't give any details of the alternatives in class, so we
   don't expect you to understand Quaternions--only to know that they
   are an alternative to Euler Angles.
 
4. Curves and Surfaces
   - How are parametric curves used to describe geometry?
   Parametric surfaces?
   
   
Why do we use piecewise cubics so often in graphics? How do we
   use them?
 
   
   -  
 
   
   - What are the common types of piecewise cubics? Why would you
   prefer to use one over the other (for example, cardinal splines
   rather than Hermite's)? How can different types of cubics be
   converted using matrix transformations?
 
   
   - We will not expect you to memorize the matrices for each type
   of cubic. We also would not expect you to invert a matrix by
   hand.
 
   
   - What are the limitations of using piecewise cubic curves? Why
   might you want to use quartics or quintics?
 
   
   -  
 
   
   - What are approximating curves? Why would you care to use
   them?
 
   
   -  
 
   
   - What is the difference between a solid representation and a
   surface representation? Why is one harder than the other?
 
   
   -  
 
   
   - What is cracking?
 
   
   -  
 
   
   - What are the differential (normals, tangents, ...) properties
   of a curve or surface? How do we use those in graphics?
 
   
   -  
 
   
   - Why is arc-length parameterization different than standard
   parameterizations? Why might we need to adaptively subdivide?
 
   
   -  
 
   
   - What is a subdivision curve/surface? 
 
   
   -  
 
5. Viewing
   - What is perspective? How do we model it mathematically? How do
   we encode it in matrix form? What is the difference between
   parallel and perspective projections.
 
   
   - We don't expect you to memorize the matrices. But we might
   give them to you and expect you to interpret them.
 
   
   - How do we describe viewing geometry? What is a camera
   transformation? What are the more convenient ways to describe the
   camera?
 
   
   -  
 
   
   - Describe the trip "down the graphics pipeline" that a world
   space coordinate makes to wind up on the screen?
 
   
   - You must definitely know all of the words: clipping, frustum,
   viewport, ...
 
6. Rendering
What is photorealism? What contributes to it?
What are some methods for hidden surface elimination? What is a
Z-buffer? What is depth-complexity? 
How does ray-tracing work? What types of effects are easy to
achieve with a ray-tracer? Do you have to use a ray-tracer to achieve
these effects?
When are different rendering methods appropriate?
7. Lighting and Shading
   - What are the elements of the basic lighting model used in
   computer graphics? What do each of the components do? What effects
   each of the components? 
 
   
   - You should understand the difference between diffuse,
   specular, and ambient terms. Be sure to have the intuitions for
   what causes the values. 
 
   
   - What is the difference between a local and a global lighting
   model? What kinds of effects would you see in global lighting (as
   opposed to local lighting)? 
 
   
   - We didn't talk about how to implement global lighting (e.g.
   radiosity algorithms). However, it is important to know why you
   might want a radiosity renderer.
 
   
   - What are the differences between the different shading methods
   (Flat, Gouraud, Phong)? What types of differences might you see in
   images?
 
   
   -  
 
   
   - What are the different types of mapping techniques that are
   used to "fake" complexity in scenes? How do sampling issues come
   into play with these mapping techniques?