## 2016 Course Materials

I have made my slides, assignments, and in-class examples available for students and other instructors who may be interested. These slides are inspired by many others, in particular Dr. Mark Green who often teaches this course at UOIT. In addition, the in-class examples are adapted from a set of examples by Daniel Vogel at Waterloo, and I am grateful to him for making these available. The ray tracing assignment is based on skeleton code and an assignment handout by Dr. Tobias Isenberg. Finally, I am grateful to Dr. Aaron Hertzmann who was my graphics instructor at the University of Toronto and who set a high part for the technical content of a course like this. My course notes were valuable in preparing to teach this topic.

Course topics overview (2016):

- Graphics Pipeline
- From model to pixels, overview of the basic process

- Introduction to Graphics Programming
- GLUT, GLEW, and GLM
- Vertex and fragment shaders
- Transformations, lighting
- Geometrical Data

- Modeling
- Polygons, face and vertex tables, normal vectors
- Transformations, matrices, composition of transformations
- Homogeneous coordinates
- Implicit representations
- Parametric representations, piecewise representation, continuity
- Cubic curves, canonical form, blending functions
- Hermite, natural spline, Cardinal spline, Bezier curve
- Hierarchical modeling, OpenGL examples, display lists
- Subdivision algorithms

- Rendering
- Viewing transformations, projections
- Hidden surface, z-buffer, BSP trees
- Basic lighting, ambient, diffuse and specular reflection
- Texture mapping, Mipmaps, texture mapping in OpenGL

- Ray Tracing
- Local and global illumination
- Basic ray tracing technique, reflection, refraction, shadows
- Intersection calculations, sphere, plane, polygons
- Performance, bounding volumes, grids
- Distributed ray tracing, sampling patterns, path tracing

- Graphics Hardware
- Video, sync, frame buffers, bandwidth issues
- 3D acceleration, path to fixed function pipeline
- GPU architecture

- Introduction to Visualization
- Scientific and information visualization
- Visual variables and perception
- Colour perception & theory
- Colour spaces
- Scalar and vector visualization techniques
- Marching squares and marching cubes algorithms
- Volume rendering, transfer functions, volume traversal

- Advanced OpenGL programming
- Tessellation and geometry shaders
- Procedural textures
- GPGPU
- OpenGL versions

- Graphics Application Development
- Data file formats
- Interaction
- Case studies