Interactive Computer Graphics offers an introduction to computer graphics programming, focusing on the techniques needed to support interaction, such as for computer games, virtual environments or other real-time simulations. The course utilizes the "C" programming language and the OpenGL graphics programming library, though students can use a different language and library with the instructor's permission.
The Interactive Computer Graphics course has two goals:
1. To understand the fundamentals of pipelined rasterization rendering of meshed objects and curved surfaces, and
2. To become proficient at graphics programming in C using OpenGL, or an equivalent language/library combination.
The idea is that a student must understand the fundamentals of graphics in order to write an OpenGL program (and get anything but a blank screen). Hence we use several machine problems to measure both a student's ability to program (#2) and their understanding of the fundamentals (#1).
- Structure of Images: Image formats, compression and dithering.
- Mesh Data Structures: How to represent shapes as vertices, edges and faces, using the indexed face set and the half-edge data structures.
- Transformational Geometry: Scale, rotation, translation, stretch and shear of a shape.
- Viewing: How to transform a scene to accommodate a specific view.
- Perspective: How to distort scenes to give the illusion of depth.
- Lighting: The Phong model for diffuse illumination with specular highlights.
- Rasterization: How to convert mesh triangles to screen pixels.
- Texture Mapping: How to put an image onto a surface, and other effects (e.g. environment mapping) it enables.
- Visibility: The Z-buffer, painter's method and other hidden surface removal algorithms.
- GPU Programming: How to program custom effects in the graphics hardware, including vertex and pixel shaders.
- Color Theory: Different color representations including RGB, CMYK, video and CIE XYZ.
- Physical Simulation Animation: How to solve ordinary differential equations to simulate realistic motion of springs and masses.
- Parametric Surfaces: Hermite, Bezier and B-Spline/NURBS representations of curved surfaces.
- Implicit Surfaces: How to represent shapes as zero-sets of real functions over space, and use marching cubes to convert them into meshed surfaces.
- Quaternion Rotations: How to represent and interpolate rotations using quaternions.
- Skinning: How to deform meshed bodies by interpolating transformations on their bones.
- Shadowing: Casting shadows using shadow volumes and shadow buffers.