Real-Time Graphics Programming
MAT 594CM W2011 _ W 10-2 _ Elings/CNSI 2611

Angus Forbes, Instructor


This course introduces fundamental concepts in real-time computer graphics programming. The goal of the course is to provide students with a solid foundation in programming techniques as well as to introduce various approaches to representing, manipulating, and thinking about form and space. Students will become thoroughly acquainted with the OpenGL library and the GLSL shading language while investigating lighting models, texturing, curves and surfaces, dynamics, space partitioning, geometric data structures, and animation, as well as other related topics. In addition to frequent varied assignments that include reading, quizzes, short programming exercises, collaborative experiments and a research presentation, students will be graded on the technical and creative aspects of a final project. Each class will include both a lectures and a programming lab. Students should have experience programming in a high-level object-oriented language, such as Java or C++. All students are required to bring a laptop to each class in order to participate in programming exercises.

Please subscribe to the MAT 594CM Winter 2011 class forum (go here for information on how to subscribe to the forum). Announcements and assignments will posted there, along with links to articles, code, and other resources.

Week 0: Course Overview
Topics: Introduction to OpenGL programming; The git VCS

Links: [OpenGL Red Book (intro to OpenGL)] [Avoiding Pitfalls in OpenGL] [Songho's OpenGL Exposition and Tutorials] [OpenGL Reference Pages] [Nehe's Introduction to OpenGL] [GLUT] [Lighthouse3D GLUT tutorial] [Nehe GLUT OSX tutorial] [git: the fast version control system] []

Assignment: [Problem Set #1]
Week 1: OpenGL Basics
Topics: The rendering pipeline, "immediate mode" rendering functions, vectors, matrices, affine and perspective transformations, lighting, materials

Links: [OpenGL Redbook: Viewing chapter] [OpenGL Redbook: Lighting chapter] [Fallout Software's Lighting tutorial] [Steve Baker's Basic OpenGL Lighting] [Wolfram's cross product page] [Cross product snippet]

Slides: [week 1.pdf]

Assignment: [Problem Set #2]
Week 2: OpenGL Basics, continued Topics: Models & meshes, texturing

Links: [Blender download] [libpng] [libjpeg] [OpenGL Redbook: Texture Mapping chapter] [Simple OpenGL image loader]

Slides: [week 2.pdf]
Week 3: C Programming, 6DOF camera, Vertex Rendering
Topics: Pointers, arrays, structs, easing functions, interpolation, vertex arrays, vertex buffer objects, display lists

Links: [C programming tutorial] [Pointer arithmetic tutorial] [Open Asset Import Library] [Songho's vertex array tutorial] [display list tutorial]

Slides: [week 3.pdf]
Week 4: Curves & Surfaces; Space Partitioning; Computational Geometry
Topics: Parametric curves, Bezier curves, Hermite curves, Catmull-Rom splines, b-splines, NURBS curves and surfaces, octrees, voronoi diagrams, delauney triangulation, convex hulls, intersection tests
Week 5: GLSL Basics
Topics: fixed functionality vs. custom rendering pipeline, vertex shaders, fragment shaders

Links: [Introduction to GPU Programming with GLSL.pdf] [GLSL Lighthouse3D tutorial] [Orange book code samples (.zip)] [Khronos GLSL reference card]

Code: [shader examples directory]

Slides: [week 5.pdf]
Week 6: GLSL Techniques
Topics: textures as data, custom lighting models, bump mapping/normal maps, vertex displacement

Links: [Fabien Sanglard's bump mapping tutorial] [Swiftless bump mapping tutorial] [gl_NormalMatrix] [Shamyl Zakariya's] [Nvidia's Melody Normal Map application] [Typhoon Labs' GLSL tutorials] [ GLSL tutorials] [Phong shading]

Real-Time GPU Demos: [Nvidia GPU demos] [ATI GPU demos] [Farbrausch demoscenes] [ demoscene awards] [ demoscenes] [ demoscenes]

Guest: MAT graduate student John Delaney discusses his work on subdivision surfaces and fluid simulations
Week 7: GLSL Techniques, continued
Topics: 'Toon shaders, projective texturing, shadow maps, frame buffer objects (FBOs), light scattering

Links: ["Projective Texture Mapping," C. Everitt] ["Hardware Shadow Mapping," C. Everitt, A. Rege, C. Cebenoyan] [Fabien Sanglard's shadowmapping tutorial] [Sombermoon's shadow mapping tutorial] [Lighthouse 3D toon shader tutorial] [Nvidia's FBO tutorial
Week 8: TBA -- (class on Friday!)
Week 9: Physics Simulations; Projects
Final Presentation, 3/14/11:
References & Resources

Previous Course Pages:
MAT 201B F2010
MAT 594CM S2010
MAT 594CM S2009
MAT 259 W2009

Real-Time Rendering / Real-Time Rendering Resources
Advanced Lighting and Materials with Shaders

GPU Programming:
OpenGL Shading Language (The Orange Book) / Orange Book Resources
GPU Gems 1 (online)
GPU Gems 2 (online)
GPU Gems 3 (online)
D3D Book (online)
ShaderX 1-7, GPU Pro (some of these are online)
The CG Tutorial (online)

OpenGL & Game Programming:
OpenGL Programming Guide (The Red Book) / (old edition available online)
Interactive Computer Graphics: A Top Down Approach
Game Programming Gems 1-7, Best of
Game Development StackExchange

General Mathematics:
Mathematics for Computer Graphics (online, requires UCSB login)
Mathematics for 3D Game Programming and Computer Graphics
GLM : OpenGL Mathematics library
CML : Configurable Math Library

Beyond Geometry: Classic Papers from Riemann to Einstein
The Curves of Life
Algebraic Topology
Curves and Surfaces for CAGD: A Practical Guide
Geometry for Computer Graphics (online, requires UCSB login)
Computational Geometry in C / C and Java Resources
Computational Geometry: Algorithms and Applications
Paul Bourke's Geometry Pages

Physics & Simulations
Real-time Collision Detection
Physics for Game Programmers / Resources
Vector Analysis for Computer Graphics (online, requires UCSB login)

Quaternions and Rotation Sequences: A Primer with Applications to Orbits, Aerospace and Virtual Reality
Visualizing Quaternions
Rotations, Quaternions, and Double Groups

Geometric Algebra:
Geometric Algebra for Computer Science: An Object-Oriented Approach to Geometry / Resources
Geometric Algebra: An Algebraic System for Computer Games and Animation (online, requires UCSB login)
Geometric Algebra for Physicists

Generative Processes:
The Self-Made Tapestry: Pattern Formation in Nature
Pamphlet Architecture 27: Tooling
Protocells Generative Algorithms - Weaving, Zubin M Khabazi
Generative Algorithms - Porous Structures, Zubin M Khabazi

git home page
git Reference & github help
git Wikipedia entry

Secure Shell Wikipedia entry
Public-key cryptography Wikipedia entry

IDEs & Coding Tools:
XCode 3
Eclipse Helios
Netbeans 6.9
Vim 7.3 / MacVim 7.3
TextMate 1.5.9