This is an introductory course on the major topics in the areas of image synthesis, interactive techniques, geometric modeling, and computer-based animation. The material covered includes (1) basic principles of operation of raster graphics display devices and common two dimensional input devices, (2) homogeneous coordinate transformation techniques, (3) parallel and central projection and perspective transformations, (4) common algorithms for clipping including Cohen-Sutherland, Sutherland-Hodgman and Liang-Barsky, (5) hidden surface removal, (6) basic light and reflectance models for local illumination, (7) Gouraud and Phong shading and basic texture and bump mapping, (8) principles of global illumination including ray tracing and radiosity, (9) basic object modeling techniques, including parametric curves and surfaces, solid models, procedural models, etc., (10) principles of hierarchical modeling and (11) principles of device-independent graphics software architecture.
Grading will be based on two exams, a midterm and a second exam given on the last class day, and a series of implementation projects which will be assigned through the semester. The exams will emphasize the ideas, principles and mathematics behind the material covered and will not involve writing code fragments. Persons taking this course on a pass/fail basis need not take the exams. For these students, successful completion of the projects will determine the course grade.
Program grading for the first part of the course will involve turning in a description of the code, the code itself, and the output requested in the assignment using the turnin program. For the second part, grading involves interactive demonstrations of the programs by the students, so any machine used will have to be available for demonstrations or have an accessible counterpart on which we can do the demos. We will assume students are familiar with Xwindows or whatever alternative GUI programming environment they plan to use. The course will not concentrate on teaching the use of Xwindows or any other windowing environment in detail, however. Required programming languages include C++ and Java as the ray tracer for the first part of the course is written in C++ and the second part of the course will use Java3D. Use of platforms other than the departmental workstations for the projects is allowed provided demos can be provided on campus and normal turnin procedures can be used.
For the first part of the course, we will be using PBRT, a new physically based ray tracer that is described in detail in the course text. This provides the advantage of having a text that covers the principles we are studying in the context of a concrete implementation that we can employ, and it allows us to add new features in our projects without first having to genearate a great deal of ray tracing infrastructure. Java3D will be used as the basis for the interactive part of the course due to the fact that it provides extensive scene graph facilities, in contrast to lower level packages like OpenGL. This and the use of Java will allow more extensive coverage of these higher-level issues and larger scale and more interesting projects to be tackled.