Course: CMSC 23700 Introduction to Computer Graphics Instructor: John Reppy Ryerson 256 Lab TA: Ahsan Pervaiz Grading TA: Chengcheng Wan Lecture: TR 11:00-12:20 Ry 276 Labs: R 14:00-15:20 Lab 1 (CSIL 1) R 15:30-16:50 Lab 2 (CSIL 1) Office hours: M 11:00-12:00 Wan (Eckhart 131) T 12:30-14:00 Reppy (Ryerson 256) W 10:00-11:00 Wan (Eckhart 131) F 10:30-12:00 Reppy (Ryerson 256)
This course aims to provide an introduction to the basic concepts and techniques used in 3D computer graphics. The focus is on real-time rendering techniques, such as those found in computer games. These include: coordinate systems and transformations; geometric modeling; the programmable graphics pipeline; level-of detail optimizations; and rendering techniques.
The course covers both the theory and practice of computer graphics. The lectures, homework assignments and exams focus on algorithms, data structures, and the mathematical foundations of computer graphics, while while the lab sessions and programming projects deal with translating theory into practice.
There are two required texts:
Title: Mathematics for 3D Game Programming and Computer Graphics (3rd Edition) Author: Eric Lengyel Publisher: Cengage Learning PTR, 2011 Book web site: http://www.mathfor3dgameprogramming.com Title: OpenGL SuperBible: Comprehensive Tutorial and Reference (7th Edition) Authorw: Graham Sellers, Richard Wright, and Nicholas Haemel Publisher: Addison Wesley, 2015 Book web site: http://www.openglsuperbible.com
Note that the 6th Edition of the OpenGL SuperBible is also sufficient for the course, but if you are going to buy a new copy, you should get the 7th Edition.
The programming assignments will be written using the C++ programming language. If you are not familier with the language, you may want to pick up a copy of one of the following books:
Title: A Tour of C++ Authors: Stroustrup Publisher: Addison Wesley Title: C++ Primer (Fifth Edition) Authors: Lippman, Lajoie, and Moo Publisher: Addison Wesley
The Stroustrup text is a relatively short overview of the main features of C++, whereas the Lippman book is a detailed, and long (938 pages) description of the full language. Both books describe the latest version of C++ (the C++11 standard).
Grading for the course will be based on:
Percentage Component 20% Homework assignments (5) 30% Exams (2) 50% Projects (6)
The assignments will be posted on the class website. Homework assignments should be handed in at the beginning of class the day they are due. Programming projects will be automatically collected from your course phoenixforge repository.
In general, late homework and programming assignments will not be accepted, but each student may have one 24-hour extension on a homework assignment or individual project. You must request the extension before the assignment is due. There are no extensions on group projects.
Project grades will consist of a correctness portion (worth 70%) and a style portion (worth 30%). Your code must compile. Failure to compile will result in a 0 for the correctness portion of the grade.
Since late assignments are not accepted, the only way that you can get partial credit for a project that you fail to turn in on time is by committing your code to svn early and often. Be sure, however, to make sure that your code compiles (use comments or #ifdef to ellide broken code), since failure to compile results in a zero on the correctness portion of the grade.
The following is a tentative plan for what topics will be covered and when. Readings are denoted as "M3D" for Mathematics for 3D Game Programming and Computer Graphics and "SB" for the OpenGL SuperBible; page ranges are denoted in brackets.
Week | Activity | Topics | Readings |
---|---|---|---|
1 | Lect. 1 | Evolution of graphics hardware; the graphics pipeline; programmable shaders | M3D:Ch1; SB:Ch1&3 |
Lect. 2 | Linear algebra crash course: vectors and matrices | M3D:Ch2&3 | |
Lab. 1 | Introduction to OpenGL | SB:Ch2 | |
2 | Lect. 3 | More linear algebra; transforms; homogeneous coordinates; quaternions | M3D:Ch3&4; SB:Ch4 |
Lect. 4 | Geometry; parameterized vs. implicit representations; intersection testing. | MD3:Ch5.1-2,Ch6.1-2 | |
Lab. 2 | Shader Programs & 3D Transformations; GLFW Key & Mouse Events | SB:Ch6 | |
3 | Lect. 5 | Projections: perspective vs. orthographic; view frustum | MD3:Ch5.3-5; SB:Ch4 |
Lect. 6 | Basic illumination, lighting, and shading | M3D:Ch7.1-4,7.6-7; SB:Ch13 | |
Lab. 3 | Texturing objects; per-pixel lighting computations | SB:Ch5[137-176] | |
4 | Lect. 7 | Advanced shading: texture maps, normal maps, and procedural texturing | M3D:Ch7.5,7.8; SB:Ch5[152-199] |
Lect. 8 | Offscreen rendering; framebuffers & depthbuffers | SB:Ch9[390-412] | |
Lab. 4 | Shadows | M3D:Ch10; SB:Ch13[599-605] | |
5 | Lect. 9 | More shadows; blending | SB:Ch9[382-390] |
Lect. 10 | Deferred rendering; the G buffer | SB:Ch9[390-397],Ch13[613-624] | |
Lab. 5 | Open Lab | ||
6 | Lect. 11 | Accelerating rendering ‐ bounding volumes and view-frustum culling | M3D:Ch12 |
Lect. 12 | Accelerating rendering ‐ spatial data structures; collision detection | M3D:Ch8 | |
Lab. 6 | Deferred rendering & Culling | ||
7 | Lect. 13 | Meshes; LOD; imposters | M3D:Ch9.4-6 |
Lect. 14 | Parametric surfaces; tessellation shading | M3D:Ch11; SB:Ch8[305-333] | |
Lab. 7 | Open Lab | ||
8 | Lect. 15 | Terrain rendering | |
Lect. 16 | Animation ‐ interpolation of key frames | ||
Lab. 8 | Terrain rendering | ||
9 | Lect. 17 | Animation ‐ physics-based animation | MD3:Ch15.2 |
No lab; Thanksgiving | |||
10 | Lect. 18 | GPGPU | |
Lab. 9 | Open Lab |
Note that not all of the topics that we cover in class are covered by the texts.
There will be two exams given in the evenings on Thursday November 2nd in Kent 107 (6th week) and Tuesday November 28th in Saeih Hall 146 (10th week). Both exams will be given from 7-9pm.
There will be five written homework assignments over the course of the term. Assignments will typically be posted here on Wednesdays and be due at the beginning of class on Thursday the following week. Late homework will not be accepted for credit.
Date Assignment Due date September 29, 2017 Homework 1 October 5 (at the beginning of class) October 12, 2017 Homework 2 October 19 (at the beginning of class) October 23, 2017 Homework 3 October 31 (at the beginning of class) November 11, 2017 Homework 4 November 21 (at the beginning of class) November 21, 2017 Homework 5 November 28 (at the beginning of class)
The course will require six programming projects. The projects will be coded in a subset of C++ using the OpenGL 4.1 core profile and the GLFW library (version 3.2.1). This platform is supported by the CSIL Macs, which are running OS X 10.11 (El Capitan).
We believe that programming style is important, thus 30% of your project grade will be based on style and documentation of your code (the other 70% will be based on correctness). It is also important that your code compile successfully. Code that does not compile will not be graded on correctness; i.e., it will get a zero on the correctness part of the grade.
Projects 5 and 6 together constitute the final project. You are free to work in pairs for the final project. Project 6 will be due at 12 noon on Thursday, December 7. Furtheremore, there will be final project demos from 1:30-3pm on the same day in CSIL-1.
Date Project Due date September 29, 2017 Project 1: Basic OpenGL Rendering [Updated 2017-10-01] October 9, 2017 (10pm) October 9, 2017 Project 2: Shading and Lighting [Updated 2017-10-14] October 18, 2017 (10pm) October 19, 2017 Project 3: Advanced Lighting Techniques October 30, 2017 (10pm) November 2, 2017 Project 4: Deferred Rendering [Updated 2017-11-14] November 15, 2017 (10pm) November 16, 2017 Project 5: Final Project (Part I) November 30, 2017 (10pm) November 22, 2017 Project 6: Final Project (part 2) December 7, 2017 (12 noon)
We will use phoenixforge to manage project code and submissions. Your class repository is accessible at
where CNETID is your personal CNet ID (i.e., you uchicago.edu email address). You can also login to phoenixforge.cs.uchicago.edu using your CNet ID and password.
Here you will find links to materials that are presented in the Lab sessions.
September 28 Lab 1: OpenGL Basics October 5 Lab 2: Shader Programs, 3D Transformations, and GLFW Events October 12 Lab 3: Texturing Objects & Per-Pixel Lighting Computations October 26 Lab 5: Shadow Mapping November 8 Lab 6: Deferred Rendering
The following is a list of supplemental documents for topics not covered by the texts. As necessary, we will post revisions here.
Date Document October 29 Compositing Digital Images by Thomas Porter and Tom Duff November 14 Notes on polygon meshes
The University of Chicago is a scholarly academic community. You need to both understand and internalize the ethics of our community. A good place to start is with the Cadet's Honor Code of the US Military Academy: "A Cadet will not lie, cheat, or steal, or tolerate those who do." It is important to understand that the notion of property that matters most to academics is ideas, and that to pass someone else's ideas off as your own is to lie, cheat, and steal.
The University has a formal policy on Academic Honesty, which is somewhat more verbose than West Point's. Even so, you should read and understand it.
We believe that student interactions are an important and useful means to mastery of the material. We recommend that you discuss the material in this class with other students, and that includes the homework assignments. So what is the boundary between acceptable collaboration and academic misconduct? First, while it is acceptable to discuss homework, it is not acceptable to turn in someone else's work as your own. When the time comes to write down your answer, you should write it down yourself from your own memory. Moreover, you should cite any material discussions, or written sources, e.g.,
Note: I discussed this exercise with Jane Smith.
The University's policy, for its relative length, says less than it should regarding the culpability of those who know of misconduct by others, but do not report it. An all too common case has been where one student has decided to "help" another student by giving them a copy of their assignment, only to have that other student copy it and turn it in. In such cases, we view both students as culpable and pursue disciplinary sanctions against both.
For the student collaborations, it can be a slippery slope that leads from sanctioned collaboration to outright misconduct. But for all the slipperyness, there is a clear line: present only your ideas as yours and attribute all others.
If you have any questions about what is or is not proper academic conduct, please ask your instructors.
Last revised: November 28, 2017