Spring 2013


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 also examine the rendering pipeline and algorithms that improve performance including clipping and hidden surface removal and depth buffers. 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 including grammar based models, isosurface extraction, and GPGPU computing using CUDA.

Class info

Room: Science Center 240
Time: MWF 9:30am–10:20am
Lab: W 2:40pm–4:10pm - Sci 240
Text: Interactive Computer Graphics (6e) by Edward Angel (required)
Other Helpful Texts:

Instructor info

Professor: Andrew Danner
Office: Science Center 253
Phone: (610) 328-8665
Office hours: by appointment


1 Jan 21   Intro to Graphics,
Software Tools
InClass: Intro
Lab 01
Jan 23  
Jan 25  
2 Jan 28   OpenGL
Rendering Pipeline
Shader Intro
InClass: OpenGL
Project 1: Pix Buffer
Jan 30  
Feb 01 Drop/Add ends
3 Feb 04   Vector and Matrix operations InClass: Geometry
Project 2: Basic Shapes
Feb 06  
Feb 08  
4 Feb 11   3D Transforms InClass: Frames/Events
Project 3: Interactive Easy CAD
Feb 13  
Feb 15  
5 Feb 18   projections, LookAt, Texture mapping
InClass: Textures
Project 4: Planets
Feb 20  
Feb 22  
6 Feb 25   smooth rotations, camera class, perspective projections Project 5: Camera motion
Feb 27  
Mar 01  
7 Mar 04   Phong Lighting model, normals Midterm: Ray Tracing
Mar 06  
Mar 08  

Mar 11

Spring Break

Mar 13

Mar 15

8 Mar 18   Bump mapping, Procedural noise InClass: Bump mapping
Mar 20  
Mar 22  
9 Mar 25   Grammar based Methods InClass: Grammars
Project 7: Plants
Mar 27  
Mar 29 Last day to declare CR/NC
or withdraw with a "W"
10 Apr 01   Particle Systems  
Apr 03  
Apr 05  
11 Apr 08   CUDA Intro, memory/kernels  
Apr 10  
Apr 12  
12 Apr 15   CUDA Synchronization, parallel patterns Project 8: CUDA Performance
Apr 17  
Apr 19  
13 Apr 22   CUDA Applications, OpenGL Interopability  
Apr 24  
Apr 26  
14 Apr 29   Marching Squares, Voronoi Decomposition, Wrapup  
May 01  
May 03  

May 13

Final Project Due


Grades will be weighted as follows:
50% Lab assignments
20% Midterm
20% Final
10% Class participation

Homework policy

Lab assignments will typically be assigned in class at the end of the week and will be due before midnight the following Thursday night. You are strongly encouraged to start early and ask questions early if you get stuck. You will submit you assignments electronically using the handin40 program. You may submit your assignment multiple times, but each submission overwrites the previous one and only the final submission will be graded. I will also use Prof. Newhall's late homework policy for this course. You (or you and your partner) are allowed to use up to 3 late days this semester for turning in lab project assignments. However, at most 2 late days can be used on an individual assignment. Late "days" are measured in class periods after the due date. For example, if the original assignment is due on Thursday before 1am, then if you submit it after Thursday at 1am but before next Tuesday at 1am it is one day late.

Use late days wisely; once you have used up your late days, I reserve the right to not accept any further late assignments from you, and if I do accept further late assignments from you, you will receive a significant late penalty on them. I strongly recommend that you do not use any late days on the first few assignments.

Academic Accommodations

Academic accommodations are available for students with disabilities who are registered with Student Disability Services in the Dean's office.

If you believe that you need accommodations for a disability, please contact Leslie Hempling in the Office of Student Disability Services (Parrish 130) or email lhempli1@swarthmore.edu to arrange an appointment to discuss your needs. Leslie Hempling is responsible for reviewing and approving disability-related accommodation requests. As appropriate, she will issue students with documented disabilities an Accommodation Authorization Letter. Since accommodations require early planning and are not retroactive, please contact her as soon as possible. You are also welcome to contact me privately to discuss your academic needs. However, all disability-related accommodations must be arranged through Leslie Hempling in the Office of Student Disability Services.

Academic Integrity

Academic honesty is required in all work you submit to be graded. You may not submit work done with (or by) someone else. You may not examine or use work done by others to complete your own work. You may discuss assignment specifications and requirements with others in the class to be sure you understand the problem. In addition, you are allowed to work with others to help learn the course material. However, with the exception of the student mentors and your partner on group assignments, you may not work with others on your assignments.

All code you submit must be your own with the following permissible exceptions: code distributed in class, code found in the course text book, and code worked on with an partner. In these cases, you should always include detailed comments that indicates on which parts of the assignment you received help, and what your sources were.

"It is the opinion of the faculty that for an intentional first offense, failure in the course normally is appropriate. Suspension for a semester or deprivation of the degree in that year may also be appropriate when warranted by the seriousness of the offense." - Student Handbook (2010-2011, pg36 Section A.4.b.i)

Please see me if there are any questions about what is permissible.

OpenGL docs QT docs OpenGL 4.2 Quick Reference Card
GLSL 1.20 specs
Tia's Language Notes
OpenGL 3.3 Documentation
CMake (feedback welcome)

Common C++ Libraries