CS543 - Computer Graphics - Fall 2004
Prof. Matthew Ward
FL134, 831-5671, email@example.com
Office Hours: Monday and Thursday at 10, Tuesday and Friday at 1:00 others by appointment
Textbook: F.S. Hill Jr.: Computer Graphics, Second Edition (Prentice-Hall)
Additional Resources: All documents for the course will be made available in the website http://www.cs.wpi.edu/~matt/courses/cs543 and on the CCC file server at /cs/cs543/.
Overview: Computer Graphics has historically been taught in a standard fashion - starting with 2-D vector graphics, progressing through 3-D wire frames, arbitrary viewing and perspective projections, hidden line/surface removal, and finally shading techniques. This is the format found in most graphics text books. For this course, I will present an alternate ordering of topics which I feel will be more effective, starting with the pixel instead of the vector, looking at surface/light interactions early on and gradually increasing the complexity of the scenes being rendered. As no text book (to my knowledge) follows this format, we will try to learn the material by reading the appropriate sections from the recommended course text as well as other texts I've put on reserve in the library. I've written some outline material for each "Module" of this course. Each has some key topics which are described in more detail in the text, as well as a project covering the topics. You can find the PostScript and PDF versions of these notes in the /cs/cs543/doc directory on CCC or on the web at http://www.cs.wpi.edu/~matt/courses/cs543/book/book.pdf.
Projects: I have designed a sequence of projects which are meant to expose the students to the critical components of a 3-D modeling and rendering pipeline. Students are expected to work independently, but may interact with other students to discuss alternate designs and implementation strategies. These assignments are described at the end of each module. Additional hints can be found here.
Each student must complete the first 7 projects; projects 8 through 10 are for those wishing a broader exposure to certain topics. For each project there is a "minimum expectation" - bells and whistles added at the discretion of the student will have little, if any, effect on the project grade (though they may add considerably to your personal satisfaction). Thus you should get the basics working first, and then add any extensions you'd like. Students will be required to demonstrate each project to me (I will reserve time before and after classes for these demonstrations, as well as during my office hours) or provide me with an executable (for some architecture readily available on campus) and instructions for usage. In addition, I reserve the right to inspect your source code to ensure you are adhering to good software development practices. Each project should require no more than 2 weeks to complete, and many should be doable in 1 week. Although there are no "hard" deadlines, you should have turned in at least three projects by the time of the midterm. This will not only help you with the midterm, but will also help avoid craaming a bunch of projects into the last week of the semester. If several students become significantly behind schedule on turning in assignments, I will be forced to impose hard deadlines.
Exams: There will be two exams given for this course. The midterm will be held on the eighth week of class (the actual date may vary, due to snow, illness-based cancellations, or conference trips I must take) and will be worth 40% of your exam grade. The final will likely be held on the last class and count for the remaining 60% of your exam grade. For the midterm exam you will be permitted one sheet of 8.5'' x 11'' paper for notes, and for the final you'll be allowed 2 pages of notes.
Grading: You MUST obtain a passing average on the exams to pass the course, which generally means obtaining a grade of 65 or more. Your projects can contribute plus or minus one grade to your final grade. Thus if you receive a B average on the exams, your project grade could elevate this to an A or drop it to a C (or leave it as a B) based on how many of the projects met the minimum expectation. Note that you could pass the exams and fail the course if you do very poorly on the projects.
Facilities: You can use whatever computer you have at your disposal, as long as it supports at least 256 colors and your program can be demonstrated on a machine on campus.
Software Resources: Basically, the projects can be completed on any computer which permits you to do two things: set the color map and draw an array of pixels. This can be done either in an interactive mode (using a graphics language or package), or a static mode (outputting an image into a file using a particular image format). I provide the basic software you'll need to get started in three different multiplatform languages. The first is Java, the second is C++ using OpenGL, and the third is C using X. To compile and run your first graphics program, decide which language you'd like to use, download the appropriate files either from the list below or from the directory /cs/cs543/software on the WPI CCC server, and try to build them. Note the requirements for each language.
You'll need the Java Development Kit, which is available for free (if your system does not already have it installed) via this site for several platforms. Alternatively, you can get the Java 2 SDK, available from the same site. This package is much larger than the JDK, but contains extra goodies beyond the necessary compilers and viewers.
Once you've done this, you can download the following files
OpenGL is a graphics language with bindings to several languages, notably C and C++. It is a defacto standard in the graphics industry, and many platforms and accelerator cards support it. A good source for information on OpenGL is here. Most of the GL libraries come packaged with Windows '98 and above, though you might need to retrieve a copy of the GLUT (GL Utilities Toolkit) library for the window and interface management components from here. If you are running on Unix or Linux, you can get a freeware library called Mesa (from here ) that is, for our intents, identical to OpenGL.
Once you have installed the appropriate libraries and header files (unless they are already installed), download and test the following:
For many years, I ran this course (and the equivalent undergrad course) using C and X (the language to support X Windows graphics and events) under UNIX. A TA for the undergraduate course from the early 90's, Dominic Giampaolo, wrote a library of routines that lie on top of X to shelter students from having to learn the details of X. This package, called libsx (for Simple X), has been quite robust over the years. Many useful demonstration programs are provided for both generating graphics and building interface components, so that most, if not all, assignments for the graphics courses could be built by simply modifying one of the demos. In the /cs/cs543/software/libsx directory you will find the source code and makefiles for libsx and approximately a dozen demonstration programs. You can just copy one of the demo directories to your machine and try building it, or copy the entire libsx directory to the UNIX or Linux machine you do your development on. Note the Makefile refers to a file called libsx_defs, which you will have to copy as well, unless you put a hard link to the instance in the cs543/software/libsx directory in the makefile. This just provides different command line arguments based on the C compiler being used, as well as a way to support multiple platforms simultaneously (at one point we had 4 different flavors of UNIX being used on campus).