Announcements
-
Course web page is under development
Course Info
Instructor: Prof. Andrew Danner
Class: MWF 9:30am-10:20am Sci 105
Lab A: M 1:05-2:35pm Martin 327
Lab B: M 2:45-4:15pm Martin 327
Office hours: W 10:30am-12:00pm, R 1:30-2:40pm Martin 306
Edstem: CS40 Q&A forum
Course Description
Welcome to CS40: Computer Graphics! This course focuses on the creation and manipulation of 3D geometric models and the rendering of these models on a two dimensional screen. We will examine modeling from both a pixel-based view and a more geometric vector-based approach. Core topics include geometric primitives, 2D and 3D matrix transformations, projective geometry, and object modelling. We’ll examine the traditional rendering pipeline and will explore advanced techniques for scene manipulation using programmable shaders. Intermediate topics include texture mapping, lighting, and shadows. We will be using the modern OpenGL programming approach which uses programmable vertex and fragment shaders throughout the course. Advanced topics may include GPGPU computing using CUDA, particle systems, noise, and additional programmable shaders.
Resources
There is no required textbook for this course.
Tutorials:
References:
-
OpenGL 4 Shading Language Cookbook (3e) (online at Swarthmore)
-
CUDA by Example
-
OpenGL Programming Guide (9e)
Quick Checks for Online WebGL demos:
Course Goals
By the end of the course, you will have developed the following knowledge and skills:
-
You will learn how to write programmable shaders to manipulate vector geometry and render 3D scenes into a 2D image buffer.
-
You will learn alternative pixel based rendering methods such as ray tracing that bypass the vector geometry processing pipeline.
-
You will learn how graphics hardware leverages the Single Instruction Multiple Data (SIMD) architecture to accelerate the processing of millions of vectors in parallel. Additionally, you will better understand cases in which the SIMD architecture is/is not beneficial.
-
Through CUDA, you will learn how GPU hardware can be used to solve problems related to and distinct from computer graphics.
-
You will improve your software engineering skills by learning more advanced coding features, using multiple third party packages, and practicing visual debugging techniques.
-
You will learn to apply multiple course concepts to a final project of your own design.
Student Responsibilities
CS40 requires you to understand several linear algebra and geometric concepts and apply them to an advanced codebase in a highly specialized parallel computing environment. OpenGL, Qt, and CUDA are large software APIs and we will not be exploring them in great depth in a one semester course. To succeed in this course, you should consistently do the following:
-
Attend class and lab sessions. The primary introduction to course material is through class instruction. Attending class is essential for understanding the subject. Lab sessions provide additional time to get hands on practice with the course material. Lab attendance is mandatory.
-
Participate actively in the learning process. The best way to learn this material is through constant effort. Run the demos and make small changes in a sandboxed environment before making larger changes or implementing new features in lab.
-
Start the lab assignments early. CS40 is a coding course that relies on a number of specialty third party libraries. It is extremely difficult to understand, write, and test solutions at the last minute. It may be impossible to work on some labs remotely over ssh. I understand that it is not always possible to put serious time into an assignment early. However, even 30-60 minutes will be helpful, to ensure that you understand what the problems ask of you and to help you start thinking about where sticking points will be early.
-
Consult the documentation. In class examples or starting points for lab assignments will often have sample uses, but Qt and OpenGL functions often have numerous options or flags that may be helpful. Consulting the documentation for these libraries should be part of your course learning.
-
Seek help early and often. Because course material builds on previous material, it is essential to your success in this class that you keep up with the course material. If you feel you are falling behind or having trouble grasping a concept, please come to office hours. Ask questions, and review other questions on EdStem. You should also feel free to email me to set up an appointment if you cannot attend normal office hours.
Schedule
WEEK | DAY | ANNOUNCEMENTS | TOPIC & READING | LABS |
1 | Sep 03 | Course Introduction
| No lab | |
Sep 05 | ||||
2 | Sep 08 | OpenGL
| Lab 1: Image Processing | |
Sep 10 | ||||
Sep 12 | ||||
3 | Sep 15 | Drop/Add Ends | Linear Algebra tools
| Lab 2: 2D Shape Rendering |
Sep 17 | ||||
Sep 19 | ||||
4 | Sep 22 | Moving to 3D
| Lab 3 | |
Sep 24 | ||||
Sep 26 | ||||
5 | Sep 29 | Projection Transforms
| Lab 4 | |
Oct 01 | ||||
Oct 03 | ||||
6 | Oct 06 | Lighting
| Midterm Project: Raymarcher | |
Oct 08 | ||||
Oct 10 | ||||
Oct 13 | Fall Break | |||
Oct 15 | ||||
Oct 17 | ||||
7 | Oct 20 | Intro to CUDA
| Midterm Project continued | |
Oct 22 | ||||
Oct 24 | ||||
8 | Oct 27 | More CUDA
| Lab 5 | |
Oct 29 | ||||
Oct 31 | ||||
9 | Nov 03 | Noise
| Final Projects Begin | |
Nov 05 | ||||
Nov 07 | Last Day to Declare CR/NC | |||
10 | Nov 10 | Particle Systems | Lab 6 | |
Nov 12 | ||||
Nov 14 | ||||
11 | Nov 17 | Advanced Shading Methods | Lab 7 | |
Nov 19 | ||||
Nov 21 | ||||
12 | Nov 24 | Acceleration Structures | Lab 8 | |
Nov 26 | ||||
Nov 28 | Thanksgiving | |||
13 | Dec 01 | TBD | Lab 9 | |
Dec 03 | ||||
Dec 05 | ||||
14 | Dec 08 | Wrapup | Final Project Demos | |
Dec 10 | ||||
Dec 14 | Final Exams Start | |||
Dec 20 | Final Exams End |