Annotation

During the course, students will become familiar with the fundamental principles of 3D computer graphics using the C++ programming language and the OpenGL graphics API (optionally Vulkan), and will gain practical experience with shader programming in GLSL. They will progress through the steps from loading a 3D model to its visualization, including working with cameras, transforming objects and entire scenes, setting up lighting, working with textures, normal maps, shadows, skybox creation, and more.

Lesson plan

Dare Time Event
16. 9. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 1 - Vectors, points, basic operations, vector spaces, coordinate systems, transformations, OpenGL template
23. 9. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 2 - Affine space, modeling transformations, initial implementation of the Rasterizer class
30. 9. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 3 - Projective space - camer representation
7. 10. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 4 - Mesh buffers (VAO, VBO, EBO), materials management for fragment shaders (SSBO)
14. 10. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 5 - Implementation of Entity Component System
21. 10. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 6 - Hierarchical transformations using ECS (scene graph), extending materials with textures
28. 10. 2025 Free day
4. 11. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 7
11. 11. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 8
18. 11. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 9
25. 11. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 10
2. 12. 2025 14:15 – 15:45, 16:00 - 17:30 Lecture and exercise 11
9. 12. 2025 14:15 - 17:30 presentation of solutions to tasks assigned during exercises

Literature

In addition to the recommended literature listed in the introductory slides of the first lecture, the primary source of information are the lecture notes and accompanying source files.

Credit

The maximum number of points for completing (i.e., implementing and verifying the functionality of) individual tasks can be found here. All submitted assignments are expected to demonstrate perfect familiarity with the source code and understanding of the methods and procedures used. The deadline for obtaining credit is December 9, 2025.

Exam

The exam is oral with written preparation (max. 55 points). The exam questions correspond to the topics covered in the lectures. A list of exam question topics can be found here. The primary source of information for exam preparation are presentations and lecture notes. Additional recommended reading is listed on the slides from the first lecture. Exam dates will be posted during the exam period in Edison.

Lectures

Course lectures

Excercise 1

Introductory exercise mainly explains the representation of geometry, affine and projective spaces, coordinate systems, and affine transformations. The second goal of the first exercise is to get familiar with the template (for VS2022), which can be used to facilitate the completion of tasks from individual exercises. During the exercise, we will discuss the following topics: representation of input geometry (OBJ format), vertices, normals, materials (MTL format), and textures. We will also describe the basic functionality of libraries used to work with the OpenGL API.

Excercise 2

The goal of the second exercise is to create the Rasterizer class based on the tutorials in the template. Class should contain methods for OpenGL context creation, loading OBJ meshes and GLSL shaders, and the main rendering loop.

Excercise 3

In this exercise we should create the camera class allowing as to build view and projection matrices.

Excercise 4

This exercise builds on the previous state of our project by loading meshes into the graphics card memory. We should be able to display the LEGO model using a simple fragment shader (e.g., Lambert or Phong).

Excercise 5

The result of this exercise should be the integration of ECS with the Rasterizer class. ECS will be implemented by the EnTT library.

Excercise 6

During this exercise, we should introduce the hierarchy of transformations of our models loaded into the scene using ECS.