Graduate Computer Graphics
Warren Weaver Hall, Rm 109
Wednesday at 5-6:50pm

Office hours: Tuesday, 4-5pm

What we will cover:

There are many courses that can teach you how to use commercial computer graphics packages and APIs. This course, in contrast, will teach you how to build 3D computer graphics from the ground up. This will include 3D modeling, animation, and rendering. At the end of the semester you will have built your own complete working real-time 3D computer graphics systems that runs in Java in web browsers.

Why Java?

If this were a course in using 3D computer graphics, we would probably use an existing 3D platform such as the Unity game engine. But this is a course not in "driving the car", but rather in "building the car". The best way to do that is to have a reasonably fast programming language that allows you to show your work on-line. This rules out, for example, JavaScript (much too slow) and C++ (cannot run on-line without downloading binaries).

What you should already know

You do not need to be a "Java programmer" coming into this course. If you are already familiar with C++ or any similar language, you will not have any trouble picking up enough Java to do this course If you are already familiar with C++ or any similar language, you will not have any trouble picking up enough Java to do this course.

On the other hand, if you are not already an experienced programmer, then I do not suggest you take this course, as there will be weekly programming assignments, and you will not be able to keep up.

Computer graphics uses a lot of matrix math and some calculus. At the start of the course we will go over all of the matrix and vector math that you will need.


Class notes (so make sure you come to class!), will be posted on-line after each lecture.


To be announced

Discussion list:


Lectures (tentative schedule):

Introductory lecture
Simple applets and 2D matrix transformations
3D matrix transformations
Modeling shapes with polygons
Perspective, animation hierarchy, inverse kinematics
Rendering, part 1
Rendering, part 2
Rendering, part 3
Ray tracing, part 1
Ray tracing, part 2
Guest lecture by Frank Lantz
Guest lecture on splines by Denis Zorin
Texture mapping
Advanced topics

Setting up a homepage and access to computers:

Most of you have the homepage and computers thing already figured out. But just to make sure you have at least one way to show your work on line, your NYU webpage can be activated and modified as follows:

To post assignments for this class, you should set up a subdirectory of your web site (preferably your NYU web site). Name this subdirectory "graphics". It should have a main "index.html" file, and that file should link to the various homework assignments. After the first class, you will send the grader an email, with subject line "graphics", telling him the URL.

January 30 class

For our introductory lecture I mainly went over the high level ideas of what we are going to do in this course, and showed some examples of computer graphics in action.

Homework assignment for this class, due before the start of next class: Put up on your class web page an essay describing what motivated you to take this course (eg: are you hoping to do computer graphics to make movies?), and any topics, material or ideas in particular you would like to see covered in this semester's class.

Notes for this lecture are here.

February 6 class

For our Feb 6 class we did two things:

Here is the code for the class that I used to build my little java applet example.

Here is the code for the class that I wrote in class, which extends BufferedApplet.

Homework assignment for this class (due before start of class): Build your own simple interactive java applet. You can use my applet as inspiration and to see how various features work, but don't make your applet similar to mine! The key is to have fun with it, and do something cool.

To compile and run your applet from the command line, you can use the latest version of the Java Development Kit (JDK), which you can download from

To compile all of your java files, you can just type in the command line:

   javac *.java

You can also develop from an Integrated Development Environment (IDE) such as Eclipse.

You can download Eclipse from the Eclipse Downloads page. Be sure to download Eclipse IDE for Java Developers.

Installing Eclipse is slightly more involved if you are on Windows than if you are on a Mac. So if you are on Windows, you can read this Tutorial for installing Eclipse on Windows.

To get your Java applet running from the Web, or in appletviewer from the command line, you need an html file that contains an applet tag. The simple example1.html file I used in class looked like this:

   <applet code=example1 width=640 height=480>
If you have example1.html in your current directory, you can either type into the command line:
   appletviewer example1.html
or you can click on example1.html from a finder window, to launch the applet in a browser.

Notes for this lecture are here.

February 13 class

You can fetch the homework (due by start of class next week) and various auxiliary files by downloading zipped file

The notes from the class lecture are here.

Please observe these GRADING GUIDELINES.

February 20 class

The notes from the class lecture are here.

If you are enrolled in the class, you should be able to see the video of the lecture in two parts: PART 1 and PART 2.

February 27 class

Lecture and lecture notes for this class

Links to examples of inverse kinematics:

IK code and simple example


Links to animations I showed in class:

TRON Light Cycles

Luxo Jr.

HOMEWORK, due before start of next class (Wed. March 6):

As I said in class, make sure your Geometry class implements the methods in interface IGeometry described in the lecture notes.

Then create a cool and fun animated scene with a hierarchy of moving parts. Be creative and use your imagination. It can be a scene, a creature, a machine, or anything else you can think of that contains a hierarchy of moving parts.

Extra credit: You are not required to do anything with inverse kinematics, but if you are feeling ambitious, for extra credit you can try to use my inverse kinematics code and create something with inverse kinematics.

March 6 class: Rendering, part 1

All materials for the March 6 class are here

March 13 class: Rendering, part 2

All materials for the March 13 class are here

The next homework assignment will be due on April 3 before class.

April 3 class: Rendering, part 3

All materials for the April 3 class are here

The next homework assignment will be due on April 10 before class.

April 10 class: Ray tracing, part 1

All materials for the April 10 class are here

The next homework assignment will be due on April 17 before class.

April 17 class: Ray tracing, part 2

All materials for the April 17 class are here

The next homework assignment will be due on May 8 before class.

April 24 class: Guest lecture by Frank Lantz

Frank Lantz is the Director of the NYU Game center, and a leading computer game designer. He will talk about exciting opportunities for computer programmers in the game industry, and other related topics.

May 1 class: Guest lecture by Denis Zorin

Denis Zorin gives a guest lecture about spline curves and spline surfaces.

May 8 class: Texture mapping

Here are the course notes from the May 8 class on texture mapping.

You have the option of incorporating texture mapping into your zbuffer or into your ray tracing, for extra credit.

Here is a link to the Oculus Rift VR headset that you got a chance to try on in the May 8 class.