Lab assignments

Spirit of the Labs

Be aware that the purpose of the labs goes beyond developing your graphics (and mathematics) programming skills to testing your general methodology and approach to problem solving, in addition to autonomy and presentation. These are crucial at Master level and beyond. Important concepts include:

1) Programming methodology: The ability to fix bugs in a methodological manner rather than through trial and error processes. In computer graphics programming, this typically involves developing intuitive knowledge of the underlying maths, perhaps through the use of pen and paper, before even approaching the keyboard or programming aspects.

2) Flexibility and robustness to error: Real-world problems are never defined clearly or perfectly. You will encounter errors and ambiguities and must develop ways to deal with them. Spotting them is a good way to start, and involves step 1) above.

3) Research: Carefully reading and understanding instructions rather than attempting to carry them out by rote. Be aware that all of the details you need to solve the labs are available through careful planning and reading of the instructions on these pages, as well as in the lectures. The labs reward students who listen and plan rather than jumping straight into the lab work.

4) Reporting and soft skills: You should be able to report your approach and present your results in an ordered and succinct manner that clearly communicates your approach, problems encountered, solutions and summarises your results. 

5) Proactive communication: Asking for help at help sessions, starting threads in the forums or determining your own strategy for seeking feedback and solving problems.


You should do three lab assignments in total. Lab assignment 1 is mandatory. The specific lab 2 and lab 3 assignments that you do depends on the lab track that you decide to take. There are two options: either rendering (lab track 1) or real-time animation (lab track 2).

Lab 1: Set-up and Introduction to 2D and 3D Graphics
Lab 1 Instructions (read this first)
Lab 1 Source code


Lab track 1: Rendering

Lab 2: Raytracing
Lab 2 Instructions (read this first)
Lab 2 Source code

A gallery of (mistaken) art work for this lab from previous years is available here.

Lab 3: Rasterisation
Lab 3 Instructions
Lab 3 Source code


Lab track 2: Real-time animation

Lab 2: Transformations
Lab 2 Instructions
Lab 2 Source code

Link to updated particle system code for Visual Studio 2017, Win 10. 

Lab 3: Hierarchical Transformations
Lab 3 Instructions
Lab 3 Source code

Update: If you are using Mac OS or Linux, I would recommend to do the 'Special Unity Track' below since Lab3 will need some Windows functions to display particle systems.

If you are generating projects using cmake on Windows, new source code for Lab2 and Lab3 are posted here.

Note that the labs can be set up with the development tool/IDE, environment and platform of your choice. Examples include GCC and Visual Studio. There are a large number of combinations of the aforementioned that may result in idiosyncratic build problems, so you will need to conduct the set up for your own specific configuration. In some cases, setting up the labs for the first time may be non-trivial if you haven't built projects in that particular development environment before. The hints and tips section here may be useful for some help with this.

Note that an older version of SDL is used in order to avoid set up issues with different platforms. If somebody creates a stable build using the latest version of SDL for the main platforms/development environments (and updates the instructions accordingly), I will be happy to upload it as a future option (and you will of course be credited for it).

Special Unity Animation Lab Track

This year, we offer an experimental Unity version for Track 2 Animation. We're interested in your feedback. You are very welcome to give suggestions to the new lab track. 

The Unity version I used to create the labs is 2018.3.2f1. It is recommended to use the same version since Unity has bad consistency with older versions.

Lab track 2: Unity version

Lab 2: Transformations and Particle System
Lab 2 Instructions
Lab 2 Source Unity package

Lab 3: Collision Detection and Level of Details
Lab 3 Instructions
Lab 3 Source Unity package

Note that you should do the tasks described in the instructions under the sections named 'Tasks'.


Submission of all the lab assignments is due 18th May 2020 as a single .zip or .rar archive with an appropriate directory structure.

The recommended documentation is a well-presented, two to four page document per lab detailing your implementation methods (your approach to completing the lab), experiences (problems encountered, solutions) and outputs (summary of what worked and what did not; also screenshots of the various stages of lab completion).

It should not contain many theoretical details or excessive code - source code comments can be added separately. If you worked in a group, group members should be clearly listed with contact details and there should also be a short section describing the contributions of each group member.

The submission materials should consist of source code, executable and documentation for each of the three labs.

Lab submission will be conducted through Canvas (Canvas links here).

Note: If you cannot log into Canvas when you click on the link above, then you probably need to be registered to it (this does not relate to your registration on the course). In this case, send the course responsible an email with subject line "DH2323 need Canvas access" from your official KTH emails address and you will be added to the system.

Feedback News