CSCI 4239/5239 Advanced Computer Graphics, Spring 2025
Email: willem@prinmath.com
Course Objectives
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:
- Shaders
- OpenGL ES
- 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 week, the first lecture is devoted to
discussing the homework assignment from the previous week, including
presentations by some students of their work. The second lecture introduces
the topic for the next homework and includes demonstration of the example
programs.
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 is expected to present their homework. The number of
homework presentations depend on the class size. All students must also present
their final project at the end of the semester.
Class participation is a significant component of the class. Class attendance
is expected, in person or by Zoom if you are sick.
Grading
There is no midterm or final examination. The grade is entirely based on
weekly assignments, presentations and the course project.
The assignments for the graduate and undergraduate students are the same, but
more is expected from graduate students, especially on the final project.
We will use ungrading this semester. You should keep a journal of your weekly
SMART goals and accomplishments.
Requirements
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 programming
language since most example programs will be in C. Students should
be comfortable programming in a high level language such as C or C++ for which
OpenGL bindings are available.
Assignments
There is one assignment per week for the first ten weeks. Assignments
generally become more complex, and code reuse from previous assignments will
simplify successive assignments.
Each week the one class consists of a few volunteers demonstrating 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. 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 the university Canvas LMS. Assignments are
generally due by midnight on Monday, with a grace period for no penalty until
8am on Tuesday morning. Late assignments will not be accepted unless
previously arranged.
Course Project
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
instructor.
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.
Copying
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
- Shaders
- Introduction
- Procedural Textures
- Lighting and Textures
- OpenGL 4 and Vulkan
- Image Processing
- Advanced Texture Use
- Noise and Normal Maps
- Shadows
- Particle Systems and Instancing
- Geometry Shaders
- Tesselation Shaders
- Compute Shaders
- Embedded Systems (OpenGL ES)
- iPhone
- Android
- WebGL
- GPU Programming
- Introduction
- Implementation
- CUDA
- OpenCL
- Applications
- Ray Tracing
- Overview
- Implementation
- Complex Objects
- Transparency
- Real time ray tracing
- Project Presentations
Resources
- OpenGL Programming Guide (Vermillion Book) 9E
- John Kessenich, Graham Sellers, and Dave Shreiner
- Class text for shaders (optional but highly recommended)
- Don't get an older edition
- Physically Based Rendering
- Matt Pharr, Wenzel Jacob and Greg Humpreys
- Class text for ray tracing (optional but highly recommended)
- 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 7E
- Graham Sellers, Richard S. Wright, Nicholas Haemel
- A comprehensive tutorial and reference. Very complete including advanced topics.
- OpenGL.org
- OpenGL documentation, code and links.
Some books are also availble electronically through the library using
Safari.