Introduction to Computer Graphics

This course provides an introduction to 3D Computer Graphics. I have been teaching it at the University of Bern several times between 2008 and 2016. The material covers the fundamentals of 3D image generation and modeling, with a focus on interactive applications. We deal with the representation of 3D geometry, 3D transformations, projections, rasterization, texturing and lighting models as well as the programming of modern graphics processing units (GPUs). The exercises for the lecture deepen the subject with programming projects based on Java and OpenGL.

Prerequisites

This course generally builds on the material of the first two academic years in a typical Computer Science curriculum. Java is used as the programming language, and familiarity with object oriented programming in Java is assumed. Students are expected to be familiar with linear algebra and matrix operations. Knowledge in graphics programming such as OpenGL is not a prerequisite.

Learning Goals

In this course, students acquire the following knowledge and skills:

  • describe and apply the mathematical foundations of 3D Computer Graphics (coordinate systems, coordinate changes, homogeneous coordinates, matrix operations, transformation matrices for rotation, translation and projection)
  • describe the foundations of color representation and processing, and their relation to the human visual system (tristimulus theory, color spaces, color transformation, gamma correction and tone mapping)
  • describe and apply the basic concepts from radiometry (radiance, irradiance, bidirectional reflectance distribution function (BRDF), and various lighting models)
  • describe the hardware architecture of 3D graphics processing units (GPU) (graphics pipeline, frame buffer, graphics processing units (GPUs), data parallelism, Single Instruction Multiple Threads (SIMT) programming model)
  • describe the software architecture of 3D graphics programs
  • describe and apply data structures for 3D graphics applications (mesh data structures and hierarchical scene graphs)
  • describe and apply special graphics programming techniques (shader programming, texture mapping, bump mapping, shadow mapping)
  • apply 3D graphics programming interfaces such as OpenGL and GLSL together with an object-oriented programming language like Java to develop their own 3D applications

Overview and Lecture Slides

The following table provides an overview of the lecture sessions including slides. Recommend reading consists of select chapters and sections from "Fundamentals of Computer Graphics" by Shirley et al.

Topic Slides and Materials Recommended Reading
Introduction 01_Introduction.pdf Ch. 1, Sec. 2.3, 2.4
Homogeneous coordinates, transformations 02_Transformations.pdf Sec. 5.2, 5.2.1, 5.2.2, 6.1-6.5
Projection from 3D to 2D 03_Projection.pdf Ch. 7
Rasterization 04_Rasterization.pdf, Homogeneous rasterization.pdf Sec. 2.10, 2.11, 3.1, 3.6, 8.2, 11.2, 11.3, 11.4
Color representation and the human visual system 05_Color.pdf Ch. 20
Shading models 06_Shading.pdf Ch. 9
Shader programming 07_Shaderprogramming.pdf, 08_Texturing.pdf
Scene management and data structures 09_SceneManagement.pdf Sec. 13.3
Curve modeling 10_Curves.pdf Ch. 15
Surface modeling 11_Surfaces.pdf, 11b_Adjacency data structures.pdf Sec. 13.3
Advanced shading 12_Advanced shading.pdf
Virtual Reality 12b_Virtual Reality.pdf
Bump mapping, shadow mapping 13_BumpShadowMapping.pdf

Programming Projects

The course includes several programming projects towards the development of a real-time rendering engine in Java. Java basecode for the projects is available in a public github repository. Follow the links below for a detailed description of each project.