Spring 2011



Welcome to CS40: Computer Graphics. This course focuses on the creation and manipulation of digital imagery. We will examine modeling from both a pixel-based perspective and the 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, shadows, and the use of programmable shaders. Starting with the OpenGL framework allows us to explore some advanced topics as well including grammar based models, isosurface extraction, and applications to Geographic Information Systems (GIS).

Class info

Room: Science Center 240
Time: MWF 9:30am–10:20am
Lab: W 1:30pm–3:00pm
Text: Interactive Computer Graphics (5e) by Edward Angel (required)
OpenGL Programming Guide (7e) by Shreiner et al. (recommended)

Instructor info

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


1 Jan 17   Intro to C++/OpenGL
Graphic Primatives
The Rendering Pipeline
Lab 01
Jan 19  
Jan 21  
2 Jan 24   Event driven programming, simple animation Lab 02
Jan 26  
Jan 28 Drop/Add ends
3 Jan 31   Geometric Primitives
Vector and Matrix operations
Lab 03
Feb 02  
Feb 04  
4 Feb 07   3D Transforms
gluLookAt, projections
Lab 04
Feb 09  
Feb 11  
5 Feb 14   more 3D transforms, Texture mapping
Lab 05
Feb 16  
Feb 18  
6 Feb 21   Phong Lighting model, normals,
stencil buffer, mirrors
Feb 23  
Feb 25  
7 Feb 28   Quaternions, smooth rotations, camera class  
Mar 02  
Mar 04  

Mar 07

Spring Break

Mar 09

Mar 11

8 Mar 14   ray-tracing, shading/advanced lighting, shadows Midterm project
Mar 16  
Mar 18  
9 Mar 21   Intro to Shaders  
Mar 23  
Mar 25 Last day to declare CR/NC
or withdraw with a "W"
10 Mar 28   Procedural Methods
Bump mapping
Mar 30  
Apr 01  
11 Apr 04   Grammar based Methods   Lab 7
Apr 06  
Apr 08  
12 Apr 11   Parallel Computing
CUDA Intro
Apr 13  
Apr 15  
13 Apr 18   More CUDA
Thread syncronization
Apr 20  
Apr 22  
14 Apr 25   Wrapup  
Apr 27  
Apr 29  

May 12

Take Home Final due at 5pm


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 Tracey Rush in the Office of Student Disability Services, located in Parrish 113, or e-mail trush1 for an appointment to discuss your needs and the process for requesting accommodations. Tracey Rush is responsible for reviewing and approving disability-related accommodation requests and, as appropriate, she will issue students with documented disabilities an Accommodation Authorization Letter. Since accommodations may 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 Tracey Rush 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.

Algorithmic Botany. book (pdf)
Artificial life of plants.
Matt Zucker's Perlin Noise FAQ (Old, and hosted in Sweden?)
Perlin's Noise Machine Talk
CMake (feedback welcome)
OpenGL 4.1 Quick Reference Card
GLSL 1.20 specs
Tia's Language Notes
OpenGL 3.3 Documentation
Glut docs

Common C++ Libraries