Course Objectives
This course provides an introduction to the principles of computer graphics. In particular, the course will consider methods for modeling 3dimensional objects and efficiently generating photorealistic renderings on color raster graphics devices. The emphasis of the course will be placed on understanding how the various elements that underlie computer graphics (algebra, geometry, algorithms and data structures, optics, and photometry) interact in the design of graphics software systems.
Text
 Required:
 (None)
 Optional reference texts:
 OpenGL Superbible (6th edition), by G. Sellers, R. S. Wright, and N. Haemel, 2013.
 Interactive Computer Graphics: A TopDown Approach with ShaderBased OpenGL (6th edition), by E. Angel, 2012.
 Computer Graphics with Open GL (4th edition), by D. D. Hearn, M. P. Baker, and W. Carithers, 2010.
Prerequisites
MATH 240 (Linear Algebra) and CMSC 420 (Data Structures). Knowledge of C or C++.
 The course involves a considerable amount of mathematical reasoning involving 3dimensional objects (points, lines, spheres, and polygons). Knowledge of and the ability to solve problems in linear algebra and calculus will be assumed. Although the course will be ``selfcontained'' and all this material will be reviewed before using, it would be a good idea to review your old class notes and textbooks on calculus and linear algebra.
 The course involves some nontrivial programming projects. Although a specific knowledge of data structures is not essential, I will assume that you are capable of writing and debugging moderately complex programs in either C or C++.
Course Work
Course work will consist of a combination of written homework assignments (around 2) and programming projects (around 4). Homeworks are due at the start of class. Late homeworks are not allowed (so just turn in whatever you have done by the due date). Programming assignments will typically be due at midnight of the due date. They are subject to the following late penalties: up to six hours late: 5% of the total; up to 24 hours late: 10%, and then 20% for every additional day late.
There will be two exams: a midterm and a comprehensive final. Tentative weights: Homeworks and projects 35%, midterm 25%, final exam 40%. The final exam will be Monday, Dec 16, 8:00am10:00am.
As a courtesy to the grader, homework assignments are to be written up neatly and clearly, and programming assignments must be clear and welldocumented. Although you may develop your program on whatever system you like, for final grading your program must execute whatever basic systems (Windows, Linux, or MacOS) that our TA can get access to. (These will likely not have special graphics cards capabilities.) If you develop your program on a machine with a nonstandard system or graphics card, it is your responsibility to check that the TA can compile and run your program. Excessive delays due to system incompatibilities will result in point penalties.
Some homeworks and projects will have a special challenge problem. Points from the challenge problems are extra credit. This means that I do not consider these points until after the final course cutoffs have been set. Each semester extra credit points usually account for at least few students getting one higher letter grade.
Academic Dishonesty
All class work is to be done independently. It is best to try to solve problems on your own, since problem solving is an important component of the course, and exam problems are often based on modifications of homework problems. You are allowed to discuss class material, homework problems, and general solution strategies with your classmates. But, when it comes to formulating or writing solutions you must work alone. You may use free and publicly available sources, such as books, journal and conference publications, and web pages, as research material for your answers. (You will not lose points for using external sources.)
You may not use any service that involves payment, and you must clearly and explicitly cite all outside sources and materials that you made use of. I consider the use of uncited external sources as portraying someone else's work as your own, and as such it is a violation of the University's policies on academic dishonesty. Instances will be dealt with harshly and typically result in a failing course grade.
Unless otherwise specified, you should assume that that the UMD Code of Academic Integrity applies.
Topics
The following list of topics is very tentative. Depending on time, some topics may be added or dropped, and the order of topics may change.
 Introduction
 Overview of graphics systems, graphics devices, graphics programming.
 Graphics programming
 OpenGL, graphics primitives, color, viewing, eventdriven I/O, GL toolkit, frame buffers.
 Geometric programming
 Review of linear algebra, affine geometry, (points, vectors, affine transformations), homogeneous coordinates, change of coordinate systems.
 3d transformations and Perspective
 Scaling, rotation, translation, orthogonal and perspective transformations, 3d clipping.
 Illumination and Shading
 Diffuse and specular reflection, Phong and Gouraud shading, transparency, and shadows.
 Using Images
 Texture, normal and reflectionmapping.
 Scan Conversion
 Bresenham's algorithm, filling, sampling, filtering and antialiasing.
 Hiddensurface removal
 Backface culling, zbuffer method, depthsort.
 Modeling
 Hierarchical models, physicallybased models, massspring systems, fractals and fractal dimension.
 Curves and Surfaces
 Representations of curves and surfaces, interpolation, Bezier, Bspline curves and surfaces, NURBS, subdivision surfaces.
 Shaders
 GPU programming, vertex and fragment shaders, shading languages.
 Ray tracing
 Raytracing model, reflective and transparent objects, shadows, light transport, and radiosity.
 Color
 Gammacorrection, halftoning, and color models.
