CSCI 4239/5239 Advanced Computer Graphics, Spring 2016
The course is designed as a follow-on to CSCI 4229/5229 Computer Graphics. The
course basically starts where CSCI 4229/5229 left off and the material from
CSCI 4229/5229 is assumed. The course is targeted at students that would like
to continue on to more advanced topics in computer graphics.
The course explores four general areas:
- OpenGL ES (iPhone and Android and WebGL)
- GPU Programming
- Ray Tracing
The course stresses portable programming. The material is illustrated using
the operating system neutral OpenGL and Shader Language.
The class is in a seminar format. Each class period is divided into roughly
two halves. The second half is a lecture format that introduces the topic for
the following week. The first half is devoted to presentations by students on
the topic introduced the pervious week.
Weekly assignments comprise a sequence of programming assignments that seeks to
build practical experience using OpenGL. The final assignment is a course
project which a graphics emphasis of the students choosing.
Each student will be expected to make two short presentations: One is the
final project presentation, the other is some topic earlier in the semester.
There is no midterm or final examination. The grade is entirely based on
weekly assignments, class presentations and the course project.
The assignments for the graduate and undergraduate students are the same, but
more is expected from graduate students, especially for the class project.
Students should be familiar with OpenGL. The material from CSCI 4229/5229 is
assumed and therefore CSCI 4229/5229 or an equivalent course is required. It
is assumed that that students have read fluency in the C and C++ programming
languages since most example programs will be in C, with a few in C++.
Students should be comfortable programming in a high level language such as C
or C++ for which OpenGL bindings are available.
There is one assignment per week for the first eight weeks. Assignments
generally become more complex, and code reuse from previous assignments will
simplify successive assignments.
Each week the first half of the class consists of a few volunteers demostrating
their assignments. If there are insufficient volunteers a randomly generated
list will be used to ensure that all students get at least one opportunity to
present their assignments.
Assignments may be completed using a computer language and platform of the
student's choice, although C or C++ on a Windows, OS/X or *NIX environment
is preferred. CSEL is available to
complete the assignments and for testing. Writing portable code that will run
on any operating system is stressed.
Assignments will be graded on a GNU/Linux system. Programs should contain
#ifdef statements to facilitate compilation on this system. Students
using exotic programming languages will be expected to aid the instructor in
setting up a suitable environment for grading the assignments.
Assignments must be submitted via moodle.
Assignments are due by the beginning of class. Late assignments will not be
accepted unless previously arranged.
CAETE students are encouraged to submit assignments on the same schedule as on
campus students, but special accomodations will be made on an individual basis.
The course project involves writing a significant graphics program. It is
intended to be approximately one third of the overall course load and is due by
the last day of class.
Any project that is related to the course material would be acceptable.
Students are encouraged to develop an application that is useful in some other
aspect of their studies or work. To accommodate this students are given wide
latitude in terms of platform and language of implementation. However, in
order to facilitate grading, this should be done in coordination with the
A formal proposal is used to ensure that the project is appropriate in terms of
scope and degree of difficulty.
Students are required to do an oral presentation of their project during
class at the end of the semester.
All assignments including the course project are to be completed individually.
Exceptions to this rule may be made by prior arrangement if the scope of the
project is particularly ambitious.
Each assignment should reflect each student's individual work. However, code
reuse is permitted, including example code from the class as well as code from
resources on the web. A "safe harbor" in this regard is simply a comment
indicating where code from another source is reused. Passing off copied code
as your own is a violation of the CU Honor Code.
Where code is reused, it is expected that students should make the code their
own, and improve and expand on what is provided.
Tentative Course Outline
- Procedural Textures
- Lighting and Textures
- Image Processing
- Advanced Texture Use
- Particle Systems
- Advanced Shaders
- OpenGL Environments
- Embedded Systems (OpenGL ES)
- GPU Programming
- Ray Tracing
- Complex Objects
- Project Presentations
Some books are also availble electronically through the library using
- OpenGL Programming Guide (Red Book) 8E
- Dave Shreiner, Graham Sellers, John Kessenich, and Bill Licea-Kan
- Class text (optional but highly recommended)
- Don't get an older edition
- Advanced Graphics Programming Using OpenGL
- Tom McReynolds and David Bluthe
- A survey of advanced topics in Computer Graphics.
- Programming Massively Parallel Processors: A Hands-on Approach
- David Kirk and Wen-mei Hwu
- Programming CUDA and OpenCL
- CUDA by Example: An Introduction to General Purpose GPU Programming
- Jason Sanders and Edward Kandrot
- Practical examples of CUDA programming
- OpenGL ES 3.0 Programming Guide
- Dan Ginsburg and Budirijanto Purnomo
- Programming OpenGL ES 3.0 for the iPhone and Android
- iPhone 3D Programming
- Philip Rideout
- Developing Graphical Applications with OpenGL ES
- WebGL Programming Guide
- Kouichi Matsuda and Rodger Lea
- Running OpenGL in your browser
- Ray Tracing from the Ground Up
- Kevin Suffern
- A complete survey of Ray Tracing
- OpenGL Super Bible 6E
- Graham Sellers, Richard S. Wright, Nicholas Haemel
- A comprehensive tutorial and reference. Very complete including advanced topics.
- OpenGL documentation, code and links.