Computer Science 357

Graphics Programming

Spring, 2015


Bob Geitz, King 223A
Office Hours:
Monday 2:30-4:30, Thursday 10-12, or by appointment
I am around most of the day when I am not in class or lab.

Course Description:

This is a programming course in computer graphics. It has two serious prerequisites: knowledge of algorithms and data structures comparable to CSCI151 (alll of our code will be in Java), and sufficient mathematical experience that you can deal with matrices and linear transformations. MATH 232 is helpful but contains much more linear algebra than we will actually use. MATH 231 is also helpful. We will actually develop most of the math we need in class, though if you plan to do further work in graphics I strongly recommend courses in both Linear Algebra and Multivariable Calculus. . In this course we will focus on fundamentals: how to develop tools and algorithms for image synthesis and (to a lesser extent) animation. Our goal is not to make pretty pictures -- these days people use high-level software for that -- but rather to understand how that software works and to make some of it ourselves. By the end of this course you should be able to read many of the current research papers on graphics and to develop new tools on your own. Graduates of this course who are working in the graphics industry have strongly encouraged me to retain the focus on fundamentals. If you are more interested in final images than in the fundamental concepts, the Animation class, CSCI 259, might be a better fit for you.


3D Computer Graphics by Stteven Gortler


In the 1980s and 1990s the graphics hardware market was dominated by one company: Silicon Graphics Inc. or SGI. The Graphics Language built into the SGI workstations was called GL. Starting in the early 1990s, when it was riding high, SGI created an open version of GL, called OpenGL, and set up an independent consortium to define and standardize it. SGI is no more, but OpenGL is as close as we have to a standard, platform independent, graphics library. If you go on after this course to do graphics work in graduate school or in industry you may use OpenGL or you may use something else, but you should find your knowledge of OpenGL will help in any environment you find yourself doing graphics programming. All of the programming we will do in this class uses OpenGL. If you want to go beyond what we are doing in class, the standard OpenGL references are the Red Book and the Blue Book. There are public online versions of the first editions of these -- see the class web page for links to them.



We will have 5 significant programming projects this semester. Graphics programs tend to be long and somewhat mysterious, which means they take some time to debug. Fortunately, they are also fun. I will assume that you are starting the projects as soon as I make the assignments, and I will try to have the next assignment ready as soon as one is completed, so you should always have a program you can be working on. OpenGL is a very powerful tool set, and there is no end to the bells and whistles you can add to the assignments. I sometimes give small amounts of bonus credit for interesting extenstions of the assignments. I strongly suggest that you talk to me before you start adding things beyond what I have asked for in the assignments. I will count off if you fail to implement something that I ask for, even if what you give me is clever and uses related ideas. In short, ask before you change anything in the assignments.

In addition to the programs we will have a midterm and final. This course has a lot of concepts, not all of which lend themselves to programming projects (at least, not to projects that you could complete before you graduate...), so we will have two exams. The midterm is worth about 15% of your final grade, the final exam about 20% and the remaining 65% is evenly divided among the programming projects.

There won't be time to implement all of the algorithms we discuss in class. The exams tend to cover the material that you will not implement. If I have a sense that you are engaging with all of the material, not just the part you will be coding, it is possible that we will decide to not have a final exam. In that case the midterm and each of the five programming projects will be equally weighted. I will only consider this option if

  1. No one wants to have the final.
  2. Everyone has stayed on top of the material from class.

The Honor Code

The Honor Code has a straightforward application to this class. You may discuss the programming projects with anyone else. You may use any outside referennces that help you understand what code to write. You may reuse any of the demo code I make available this semester. Other than my code, you need to write all of the code youo turn in yourself. The exams will be closed-book exams taken in class, and you obviously should not receive help from anyone during these exams.

Course Outline

This is a rough outline, which I probably won't stick to. It should give you at least an idea of what we will be doing in the course.

1. Introduction -- 1 week

Project 1: 2D Drawing and Animation. This is the smallest of the assignments. It serves as an introduction to 2D OpenGL.

2. Transformations -- 3 weeks

Project 2: Creating a 3D System. In this assignment you will create a 3D viewing system using only the 2D primitives in OpenGL. After this you should be able to implement your own 3D library on any system that allows you to draw lines between two pixels on the screen.

3. Hidden Surface algorithms -- 1 week

4. Hierarchical modeling and animation -- 1 week

Project 3: 3D Modeling. This uses the 3D OpenGL primitives to display and animate complex motions.

---------------- Spring Break ------------------------

5. Color Theory -- 1 week

6. Lighting and Shading -- 3 weeks

Project 4: Ray Tracing. Ray tracing was the first "photorealistic"" imaging technology. It is still an important part of advanced graphical systems, such as Maya. In this assignment you will create a simple ray tracer using nothing more than the ability to indpendently color the individual pixels on the screen.

7. Realistic Image Synthesis -- 3 weeks

Project 5: Modeling with splines. This is the most open-ended of the assignments. It requires you to create curved surfaces with "splines" -- curved surfaces based on 3D meshes of points. Beyond that, it gives you an opportunity to show off your favorite techniques from the course.

. 8. Current Work in Graphics -- 1 day

The midterm exam will be in class on Wednesday, March 18.

The final exam will be on Thursday, May 14, at 2PM..