CS4621 Computer Graphics Practicum

Cornell University

F 3:35pm - 4:50pm, Uris Hall G01

Instructor: Steve Marschner


Graduate TAs

Pramook Khungurn (CS4621 head TA, pramook@cs.cornell.edu)


Disclaimer: This schedule is tentative. It might be changed in the future.

Notice (April 24, 2017): We recently changed several deadlines involving the final project.

date topic reading assignments
27 Jan Introduction Notes  
3 Feb Vertex Attributes, Uniforms, and Varying Variables Notes  
10 Feb Interaction Notes  
17 Feb 2D Transformations Notes WebGL Ray out
24 Feb 3D Transformations Notes  
3 Mar Depth Test and Blending Notes WebGL Ray due
Data Viz out
10 Mar Textures Notes  
17 Mar No Class   Data Viz due
24 Mar About the Final Project   Maze out
31 Mar Final Project Proposal Presentation (Presentation PDF due in CMS before class)    
7 Apr Spring Break
14 Apr Framebuffer Objects and Image Processing and Picking Notes Maze due
Form FP group
21 Apr No Class    
28 Apr No class    
5 May Milestone Presentation (Presentation PDF due in CMS before class)    
17 May Final Project Submission to CMS    
19 May Final Project Presentation    


Check it out here.
Check it out here.

Final Project


Implement a complex client-side WebGL application. Anything that is somewhat more meaty than PPA2 is considered sufficiently complex. This application can be a data visualization tool, a game, an artistic exhibit, or some other types of useful applications. The application must use WebGL to render 2D or 3D images.

You may not use graphics libraries such as three.js or d3. However, convenience libraries such as jQuery or glMatrix are okay.


Work in groups of 3 to 5 people. You can freely choose your team.


The final project has the following deadlines.

All the above deadlines do not have slip days.

About CS 4621

According to the Cornell Class Roster, the course description of CS 4621 reads:

Provides CS 4620 students with hands-on experience in computer graphics programming on modern graphics hardware. A semester-long project involves building a substantial interactive 3D system. The course uses Java and OpenGL for code development.

The description is mostly accurate. However, the course staff would like to try something more ambitious, so CS 4621 is really about:

Provides CS 4620 students with hands-on experience in computer graphics programming on modern graphics hardware. A semester-long half-semester-long project involves building a substantial interactive 3D computer graphics system. The course uses Java and OpenGL Javascript and WebGL for code development.

The reasons for the above changes are as follows:

  1. In order to build a substantial interactive computer graphics system, students need to learn at least the first half of CS 4620. Requiring them to start at the beginning of the semester, when they actually cannot really start yet, does not make sense.
  2. While Java is still a practical language for graphics programming (the head TA has done most of his graphics research in Java), the staff believes that creating graphics systems for the web with Javascript and WebGL is a skill with a much wider audience because the ease of deployment and the spread of mobile devices.

Accordingly, the practicum is divided into two halves. In the first halves (the first 7 weeks or so), we will give lectures on how to use WebGL to create interactive graphics applications. There will be individual programming assignments to get you familiarized with the API. In the second halves, you and your teammates will plan and execute your final project, which is a substantive computer graphics systems written using Javascript and WebGL. The system can be 3D, but it does not have to be.

One aim of the course is to give you an experience on software engineering. You should come out of the course having designed and implemented computer graphics systems by yourself with minimal help from framework code implemented by other people. You may discover that this can be a tedious and error-prone process. A competent software engineer, though, must be able to create abstractions that reduce tedium and error. In order to provide you with opportunities to grow as a software engineer, we will organize the assigments and the final project as follows:

  1. For all assigments, we will not give you any framework or starter code. You have to code your submission from scratch. However, you may learn from example code that we provide in lectures.
  2. For your final project, you are not allowed to use any libraries or frameworks that implements computer-graphics-related aspects of your project. This means that you cannot use any 2D or 3D graphics/game engines as a component of your project. Generic Javascript libraries are generally OK, but please consult with the course staff on what libraries you want to use.

With all that said, we have hope you have fun with the course!