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.

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

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 |

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.