CSCI 4239/5239 Advanced Computer Graphics, Spring 2024

Instructor: Willem A. (Vlakkies) Schreüder

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:

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.

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 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 first 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.

Distance students are encouraged to submit assignments on the same schedule as on campus students, but special accomodations will be made on an individual basis. Real time attendance is expected from distance students.

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
Shadows
Particle Systems
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
Project Presentations

Resources

OpenGL Programming Guide (Vermillion Book) 9E
John Kessenich, Graham Sellers, and Dave Shreiner
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 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.