This course covers basic 2D and 3D interactive graphics programming using OpenGL and OpenGL's GPU shader language, GLSL. We cover basic 2D and 3D graphics concepts, interaction, and simple animation. Included are 3D modeling techniques (initially polygon-based, later curves and surfaces), viewing, hidden surface removal, and realistic lighting and shading models.
The focus of the course is on desktop applications using modern shader-based OpenGL and its C/C++ API. However, we will also discuss several very similar variants: OpenGL ES 2.0 (the version of OpenGL that runs on portable devices like Android and iOS platforms), JOGL (the Java binding to OpenGL for desktop applications that can be launched from web browsers using the Java Web Start mechanism), and WebGL (a variant of OpenGL ES 2.0 in which OpenGL programs are written in JavaScript and run entirely inside of web browsers supporting the HTML5 canvas element).
From the beginning of the course, we will see how and why GPU programming has become of central importance to interactive graphics programming, how the design of the OpenGL API has evolved to enable real-time display and manipulation of massive models (such as the lidar images below which can consist of tens of millions of points), and we will learn how to write sophisticated GLSL GPU shader programs. In parallel with studying the structure and use of OpenGL and GLSL, we also study key implementation issues, both architectural and mathematical.
Except for the lidar images at the bottom, all models on this page were created and rendered by previous students in this course.

|
|
![]() 11 million lidar points colored by pulse return intensity |
![]() The same set of points georeferenced, colored based on elevation, and drawn in NASA World Wind |
Four 3-5 million point lidar data sets, colored using orthorectified areal infrared imagery.