2019 March 23,
Carleton College, Winter 2019
Joshua R. Davis, , CMC 324, x4095
This is a first course in computer graphics. Our goal is to understand the theory and methodology underlying computer-generated films, video games, scientific visualizations, etc. The course proceeds in three parts:
The only prerequisite for this course is CS 201: Data Structures. We need some of its specific content such as graphs and stacks. More importantly, students must have maturity in thinking algorithmically and learning on their own. Students are expected to learn C and basic linear algebra such as multiplying matrices. I provide tutorials to teach the essentials of these subjects, but I do not spend much class time on them.
Our class meets in CMC 210 during period 2A (MW 9:50-11:00, F 9:40-10:40). My office hours are
During office hours, no appointment is needed; just drop in. If you cannot attend office hours, then consult my weekly schedule and e-mail me to ask for an appointment, listing several times at which we could meet.
Here are some general external resources. Notice that there is no required textbook.
Here are some resources produced by me specifically for this course.
Final grades (A, B, C, etc.) are assigned according to an approximate curving process. By this I mean that there are no predetermined percentages (90%, 80%, 70%, etc.) required for specific grades. The following elements contribute to the final grade.
You are expected to spend at least 10 hours per week on this course outside class. Some students need to spend more than 10 hours. If you find yourself spending more than 15 hours, then talk to me.
For some assignments the students are expected (but not required) to work in pairs. Your pair hands in a single copy of the assignment with both names on it. You are encouraged to talk with other pairs — to bounce ideas off them — but the work that you submit must be the work of your own pair. The two members of a pair must contribute roughly equally.
Other assignments may be individual. Even on these assignments, you are encouraged to talk with other students. In the end, however, you write or type your own solutions, in your own words.
You may not copy someone else's work or allow them to copy yours — in person, over the Internet, etc. Presenting someone else's work as your own is an act of academic dishonesty. The College requires me to report you if I suspect that you have not upheld its Academic Integrity standards.
If some medical condition affects your participation in class or your taking of exams, let me know in the first week of class. You may also need to make official arrangements with the Disability Services for Students.
In most courses that I teach, homework is assigned daily and collected weekly. I declare a "one free late pass" policy. Students can hand in any one assignment a week late, with no questions asked. In this course, however, we are building fairly large, ongoing software, and each day's code builds on the day before's. You simply must keep up with the homework.
So here is the tentative policy for this course: If you cannot complete a homework assignment on time, then you must talk to me, in person, within one day of the due date. I reserve the right to change this policy.
We use OpenGL/Vulkan because, unlike Direct3D and Metal, it is a non-proprietary industry standard available for many operating systems. In theory, all of our software can be compiled and executed on any recent computer running Windows, macOS, Linux, etc.
In practice, I supply instructions for compiling and running our software in macOS on the lab machines in CMC 306 and CMC 304. You are welcome to program on your own computer, but you will have to set it up yourself following the installation instructions above. In any case, your code will be graded under macOS on the lab machines. So be sure that it runs correctly there.
We program in C for three reasons. First, graphics requires speed, and C produces fast programs. Second, C is the native language for communicating with OpenGL. Third, C is ubiquitous enough that every advanced computer science student should be proficient in C.
This schedule is tentative. It is adjusted and filled in as we go along.
Date | Day | Topic | Assignment | Notes |
---|---|---|---|---|
M 1/07 | 01 | overview, color, vector vs. raster graphics | Day 01 | Pixar, Cryptocurrency |
W 1/09 | 02 | rasterizing a triangle, interpolation | Day 02 | |
F 1/11 | 03 | interpolation, texture mapping | Day 03 | |
M 1/14 | 04 | texture mapping, abstracting pixel coloration | Day 04 | |
W 1/16 | 05 | abstracting pixel coloration, mesh | Day 05 | |
F 1/18 | 06 | mesh, rotation, translation, abstracting vertex | Day 06 | |
M 1/21 | 07 | homogeneous coordinates, lab work | Day 07 | |
W 1/23 | 08 | transition to 3D, mesh, backface culling | Day 08 | |
F 1/25 | 09 | depth test | Day 09 | |
M 1/28 | 10 | camera, orthographic projection, viewport | study | Futurama, Q*bert, Diablo, Architecture |
W 1/30 | 11 | Exam A | Day 11 | |
F 2/01 | 12 | perspective projection, clipping | Day 12 | Dolly Zoom |
M 2/04 | 13 | clipping, perspective interpolation, summary | Day 13 | |
W 2/06 | 14 | diffuse and specular reflection | Day 14 | Vermeer, Wright, Renoir, Degas, Welles (around 3:35) |
F 2/08 | 15 | ambient, positional, fog, attenuation? | Day 15 | |
M 2/11 | Midterm Break | |||
W 2/13 | 16 | OpenGL 1.x | Day 16 | 300glfw.c, 300openGL14.c, 300openGL15.c |
F 2/15 | 17 | OpenGL 2.x | Day 17 | 300shading.c, 300openGL20.c, 300openGL20b.c |
M 2/18 | 18 | OpenGL 3.2, Vulkan, texture mapping | Day 18 | 300openGL32.c, 300string.c |
W 2/20 | 19 | spot lights, shadow mapping | Day 19 | |
F 2/22 | 20 | shadow mapping | Day 20 | PCF, PCSS |
M 2/25 | 21 | picking, summary | study | |
W 2/27 | 22 | Exam B | Day 22 | |
F 3/01 | 23 | basic ray tracing, spheres | Day 23 | |
M 3/04 | 24 | lighting, shadows, mirrors | Day 24 | |
W 3/06 | 25 | cylinders, planes, bodies | Day 25 | |
F 3/08 | 26 | lights, recursive ray tracing | Day 26 | |
M 3/11 | 27 | transmission, refraction, translucency | Day 27 | |
W 3/13 | 28 | What haven't we learned? | study | Further Reading |
S 3/16 | Exam C 3:30PM-6:00PM |