Resources

Text

The required text for the course is Fundamentals of Computer Graphics by Peter Shirley (and Steve Marschner for the 3rd edition). Both the 2nd and 3rd editions are fine to use, but they do differ in some big ways - the order of topics in particular. I will expect you to read along with the sections indicated for the topics we cover (in Lectures).

Note, however, that the lectures will define the material for the course, and may include things not covered in the text. You must take good notes during lectures, and if you have to miss a lecture make sure to get a copy of the notes from someone who was present.

Git

You are strongly encouraged to use version control for all your assignments, and in fact, any programming or similar project from now on. One of the most popular modern version control systems is git, which is well worth learning if you aren't already wedded to another version control system.

Git, and much of its documentation, can be bewildering at first. A good tutorial is here: A tour of git. For the most basic usage, the following commands are enough to get you started:

Git comes with many Linux distributions, or can easily be installed with the usual package manager. It doesn't come with OS X, but can be easily installed with package managers such as MacPorts or homebrew, or directly with installers you can easily find with Google. On Windows, msysgit is one recommended option.

OpenGL

We will use the OpenGL API for fast hardware rendering. OpenGL is the most widely portable standard for fast 3D rendering on regular computers, and closely related APIs such as OpenGL ES for mobile devices and WebGL for the web are standards in their class too.

The official OpenGL website, www.opengl.org, is a good resource, including some great documentation.

Version

OpenGL has a long history, and has evolved considerably over the years. Many things have changed fairly drastically between the "old-fashioned" fixed-function pipeline of OpenGL 1.x, the addition of a shading language (GLSL) in 2.x, the clean-up of deprecated calls in 3.2, and continued development in 4.x. Unfortunately there is a wide variety of levels of support for these different versions even on brand new computers: some with weak graphics can only handle 1.1, Macs used to be strictly 2.1 (plus many extensions) but now under Lion can also handle 3.2 if you have the right hardware, and only the highest end Windows and Linux machines might support 4.x.

We will target OpenGL 2.1 (and GLSL 1.20) in this course, as it at least makes a modern approach with VBO's and shaders possible, and may run on most decent machines today --- including the computers in the ICICS 005 lab. We will attempt to steer clear of most of the ancient calls which have been dropped in later versions of OpenGL but are still legal in 2.1. In particular, we won't use glBegin/glEnd, any of the glMatrix transformation commands, or the fixed function shading pipeline with glMaterial, but instead will use VBO's and GLSL.

One complicating factor in using this older version of the API, but not the oldest, is finding good documentation.