Universiteit Utrecht - Information and Computing Sciences

academic year 2014/15 – 4th period

                      image title image title image



Lectures (Topics, Slides)


Exam & Grading

Course Overview



Literature & Links


Recent news

July 10:

  • The retake has been graded, and the final score sheet is now available. Inform me ASAP if you spot a mistake.

July 4:

June 26:

June 25:

  • Grades for the final exam are now online. Please check the sheet carefully.

June 23:

  • Answers for the final exam are now online.


Course Overview back to navigation

bunny logo image

Course: "Graphics" is an introductory lecture about computer graphics. Computer graphics deals with the algorithmic processing of visual (images) and spatial (geometry) data. The lecture will focus on the very basics of modeling and rendering, i.e., the mathematical description of three-dimensional scenes and how to create (realistic) images of such models. This is the core area of computer graphics.

Math: The course will start with a short coverage of the mathematical basics needed for computer graphics. This part will introduce fundamental concepts of linear algebra and other areas of higher mathematics that are important far beyond the field of graphics.

Foundations of computer graphics: Next, we discuss the foundations of computer graphics, such as transformations and projection of 3D models, hidden surface removal, triangle rasterization, shading, texture mapping, shadows, and ray tracing. Finally, we will also look briefly into more advanced topics in physically-based global illumination (more details are discussed in the master course "Advanced Graphics").

The lecture will be given in English.

Lecture back to navigation

Lecturer: Jacco Bikker (

Teaching Assistants:


  • Tigran Gasparian
  • Jordi Vermeulen
  • Casper Schouls
  • Sander Vanheste
  • Jan Posthoorn

Theory (tutorials)


  • Tuesdays, 11:00h - 12:45h,
    Room OWC-126 (starting week #17)
  • Thursdays, 13:15h - 15:00h,
    Room OWC-150 (starting week #17)
  • No lectures in herkansing week (week #22, i.e., May 25 - 29)

Theory Tutorials: Thu 15h-17h (after the lecture, three parallel slots)

  • 15.15-17.00 BBL-083 Jan Posthoorn, Tigran Gasparian
  • 15.15-17.00 BBL-169 Forough Madehkhaksar, Jordi Vermeulen
  • 15.15-17.00 BBL-165 Coert van Gemeren, Casper Schouls
  • 15.15-17.00 BBL-079 Anna Aljanaki, Sander Vanheste
  • Theory tutorials start in the second week of the lecture (April 30).

Practicals tutorial/consultation hours

Practical tutorials are offered before the lectures on Tuesdays.

  • BBL 112. TA: Tigran Gasparian.
  • BBL 175. TA: Jordi Vermeulen.
  • BBL 106. TA: Casper Schouls.
  • BBL 109. TA: Sander Vanheste.
  • BBL 103. TA: Jan Posthoorn.

Practical tutorials start on Tue Apr 28 (second week of the course).


Topics back to navigation

Mathematics (40%)

Linear algebra

  • Points & vectors
  • Matrices & linear maps
  • Affine transformations
  • Linear systems & determinants

Projective geometry

  • Homogeneous coordinates
  • Projection matrices

Geometric modeling

  • Primitives (triangles, spheres, etc.)
  • Curves and surfaces
  • Differential properties / normals
Core Graphics (40%)


  • Camera models / perspective projection
  • Visibility algorithms
  • Rasterization pipeline


  • Ray visibility queries
  • Data structures
  • Recursive raytracing (shadows, reflections, transparency)

Special effects

  • Basic materials
  • Shadows
Advanced Graphics (10%)

Global Illumination

  • Basic ideas of physically-accurate rendering

Rendering hardware

  • Shaders
  • Programmable shaders

(These subjects will be touched upon only briefly.)

The list is intended to give a rough orientation; topics might still be subject to change, and additional aspects might be covered.

Lecture Slides & Recommended Readingsback to navigation

Below is a list of all lectures with a very brief summary of the topics, slides downloads, and recommended readings to prepare for the lecture.

Lecture 01
Tue Apr 21

Topic: Introduction. Course structure, organization, formalities. Introduction to the field of computer grahics.

Suggested readings:

No recommendations. Rules / formalities are also listed on this web page.


lecture1 - introduction.pdf

Lecture 02
Thu Apr 23

Topic: Graphics Fundamentals. Basic linear algebra (vectors, points, coordinate systems). The raster display. Color representations.

Suggested readings:

Textbook Chapter 2.1, 2.4 (these chapters cover more material than the topics listed above; the first halves of the respective chapters are most relevant). Also: Chapter 3.2 and 3.3.


lecture2 - rasters, vectors, colors.pdf

Lecture 03
Tue Apr 28

Topic: Geometry. Implicit and parametric representations. Textures: procedural and lookup, filtering techniques.

Suggested readings:

Textbook Chapter 2.5.


lecture3 - geometry and textures.pdf

Lecture 04
Thu Apr 30

Topic: Practicum P2 Introduction. This is a special lecture by Tigran Gasparian, introducing the second assignment.

Suggested readings:

No recommendations.


lecture4 - guest lecture shaders.pdf

Lecture 05
Thu May 7

Topic: 3D Engine Fundamentals. The graphics pipeline from a functional and data oriented point of view. Matrix operations. Coordinate systems and transforms.

Suggested readings:

Textbook Chapter 5 and 6.


lecture5 - engine fundamentals.pdf

Lecture 06
Tue May 12

Topic: Transformations. Matrices for projection and perspective. The scenegraph. Connectivity data. Rasterization.

Suggested readings:

Textbook Chapter 7, 8.1, 12.1 and 12.2. Note: not all information in the textbook is covered, and some of it is presented differently (most notably, triangle rasterization).


lecture6 - projection and rasterization.pdf

Lecture 07
Tue May 19

Topic: Visibility. Depth sorting. Fine-grained and large scale visibility determination. Level of detail.

Suggested readings:

Textbook Chapter 8.2, 8.4 and 12.4.


lecture7 - visibility.pdf













Midterm Exam
Thu, May 21

Midterm Exam: Thu May 21 2015, 13:30-16:30.

What to study: Slides for lectures 1-3 and 5-7, suggested readings for these lectures, tutorials 1-3.

For this exam, you are not allowed to bring notes.
It will not be necessary to memorize rotation / projection matrices, but you are expected to be able to do a cross product and to apply the steps required to invert a matrix.
More details will be provided during lecture 7.

Lecture 08
Tue June 02

Topic: Ray Tracing. Core concepts: ray generation, ray / primitive intersection tests, shadow rays, reflections.

Suggested readings:

Textbook Chapter 4.1 - 4.4, 4.7, 4.8.


lecture8 - ray tracing intro.pdf

Lecture 09
Thu June 04

Topic: Shading Models. Concepts: BRDFs, energy equilibrium, Lambert.

Suggested readings:

Textbook Chapter 10.1, 10.2, 20.1.


lecture9 - shading models.pdf

Lecture 10
Tue June 09

Topic: Ground Truth. Soft shadows, diffuse reflections, Monte-Carlo, Distributed Ray Tracing. Path Tracing.

Suggested readings:

Textbook Chapter 13.4, 14 (as a whole), 24.1, 24.2.


lecture10 - ground truth.pdf

Lecture 11
Thu June 11

Topic: Accelerate. Faster ray tracing using acceleration structures. Efficient path tracing using importance sampling.

Suggested readings:

Textbook 12.3 and 12.4. Note that we deviate significantly from the book on these topics.

lecture11 - accelerate.pdf

Lecture 12
Tue June 16

Topic: Advanced Shading.

Suggested readings:

Just these slides.

lecture12 - advanced shading.pdf

Lecture 13
Thu June 18

Topic: Grand Recap. In this lecture, we will review the course contents. Any open questions will be answered (within reason).

Suggested readings:

Slides and Textbook.

lecture13 - grand recap.pdf

Final Exam
Tue, June 23

Final Exam: Tue June 23 2015, 08:30-10:30.

Retake Exam
Thu, July 09

Retake Exam: Thu July 09 2015, 13:30-16:30.

Course Schedule back to navigation

Period 4 Schedule

Week Date Lecture / Exams Tutorials Practical #1 Practical #2 Practical #3
17 Tue Apr 21
Lecture 1:

Assignment P1
XNA Introduction / Tutorial

Thu Apr 23
Lecture 2:
Graphics Fundamentals
18 Tue Apr 28
Lecture 3:

Assignment P2:

basic shader programming

Thu Apr 30
Lecture 4:
Shading: Introduction
Tutorials #1
Thu 15:15-17:00
19 Thu May 07
Lecture 5:
3D Engine Fundamentals
Tutorials #2
Thu 15:15-17:00
Wed May 6, 23:59h
20 Tue May 12
Lecture 6:
Tue May 19
Lecture 7:
3D Engine Details

Thu May 21

Midterm Exam    
22 May 25-29 herkansing week
23 Tue June 2
Lecture 8:
Ray Tracing: Introduction
Tue June 2, 23:59h

Assignment P3:

advanced shader programming


ray tracing

Thu June 4
Lecture 9:
Shading Models
Tutorials #3
Thu 15:15-17:00
24 Tue June 9
Lecture 10:
Ground Truth
Thu June 11
Lecture 11:
Tutorials #4
Thu 15:15-17:00
25 Tue June 16

Lecture 12:
Advanced Shading

Thu June 18
Lecture 13:
Grand Recap
Tutorials #5
Thu 15:15-17:00
26 Tue June 23
Final Exam Assignment P3 extension
Tue, June 30, 23:59h
Thu July 9
Retake Exam


Tutorials back to navigation


The lectures are accompanied by tutorials (werkcolleges).

  • The tutorials cover the theoretical aspects of the lecture.
  • There will be seven assignment sheets throughout the semester. It is expected that you work on them in self studies. Please take this seriously! You will need the practice!
  • For the tutorials, time slots are offered (see below) when a teaching assistant will be present to answer your questions, explain details, and provide further information. You should attend one of them, but it is up to you which one (i.e., you do not have to follow the "groep indeling" given by OSIRS).
  • The purpose of the tutorials is that you do the exercises yourself (either alone or in small groups). A teaching assistant will be present to assist you if you have any questions. Hence, attendance is not mandatory, but highly recommended.
  • The tutorials are a very good preparation for the midterm and final exam.
    Reading the textbook and attending the lectures is a good idea, but you can only be sure that you understood the material if you succeed in solving the assignments. The assignments in the tutorials will be very much like what you can expect in the written tests. Notice that there will be more exercises on the sheets than you could possibly do within the two hours. Exercises will be online a few days before the tutorials. We expect that you work on the questions beforehand, so you can use the two hours tutorial time to ask the TA about things you didn't understand, etc.

Tutorial Sessions

  • 15.15-17.00 BBL-083 Jan Posthoorn, Tigran Gasparian
  • 15.15-17.00 BBL-169 Forough Madehkhaksar, Jordi Vermeulen
  • 15.15-17.00 BBL-165 Coert van Gemeren, Casper Schouls
  • 15.15-17.00 BBL-079 Anna Aljanaki, Sander Vanheste
  • Theory tutorials start in the second week of the lecture (April 30).

Assignment Sheets / Downloads

Tutorial 1 - math recap, vectors    (and: solutions)
Tutorial 2 - geometry   (and: updated solutions)
Tutorial 3 - matrices   (and: updated solutions)
Tutorial 4 - perspective (and: solutions)
Tutorial 5 - ray tracing (and: solutions).

Practicals back to navigation


There will be three practical assignments, covering traditional rasterization algorithms, shaders and ray tracing. The first assignment will be online on Tuesday, April 21. We recommend that you start working on it right away.

Practicals tutorial/consultation hours

On Tuesdays, teaching assistants will be present in various rooms to help you if you have questions. These practical tutorials are offered before the lectures on Tuesdays.

  • BBL 112. TA: Tigran Gasparian.
  • BBL 175. TA: Jordi Vermeulen.
  • BBL 106. TA: Casper Schouls.
  • BBL 109. TA: Sander Vanheste.
  • BBL 103. TA: Jan Posthoorn.


  • An additional room is available: MIN-205. In this room, no TA is present, but the room is reserved for this course, so you may use it if you need the hardware / software.
  • Practical tutorials start on Tue Apr 29 (second week of the lecture).
  • We might adapt the consultation hours (extend before deadlines, shorten elsewhere).

Important Rules

Because of the large group of students taking this lecture, we need strict rules to keep everything manageable. The most important rules are listed below. Further explanations might be given during the lecture.

  • Grading: You have to hand in all practical assignments. Your grade from the practicals has to be at least 5.0 to pass this course (cf. exams & grading).
  • Working in teams: The programming assignments must be done in groups of 2 or 3 students. If you submit alone without prior consultation with the course instructor, the grade of your submission will be reduced by 1.0.
    • Building groups: You can choose your partner(s) yourself among your fellow students. If you ca not find one on your own, contact one of the TAs during the practical consultation hours. They will help you to team up with other students.
    • If your partner drops the course: contact the instructor immediately. You will either be assigned a new partner or be allowed to work alone. Working alone without prior consultation reduces your grade.
    • Project team responsibility: It is up to you how you split the work among your team members. However, this freedom comes at the price that you have to be prepared for situations such as team members dropping the course or not delivering what they promised to you. It is your responsibility to make sure that you are aware of your team's progress, so you can react to such issues in an appropriate way.
  • Students doing the course a second time: The practicals will be comparable to last year, with minor changes. The following rules apply for redoing the practicals:
    • You have participated last year, general case: You re-do the practicals. There are two possible constellations for this case:
      • If you are teaming up with someone who is doing it for the first time, you are not allowed to re-use your code. Be warned that we use software to check for plagiarism (and we have all code from last year at hand).
      • If you are teaming up with someone who also took the course last year, you can re-use parts of your code. However, be aware that we cannot guarantee the same grading (criteria might change slightly). We might be more critical in grading the parts that changed if we get the impression that you didn't put much effort into it but just copy-pasted your old stuff.
    • You have passed last-year's practicals (i.e. got at least a 6.0 for the practical part of the course before rounding): you might get an exception allowing you to "pass on" the result from last year. If you want to take advantage of that, you have to send an email to the lecturer until Thu, April 23. We will arrange a meeting with you; you have bring last year's implementation to this meeting and we will decide then if this exception is applicable for you or not.
    • Other cases (e.g. students who did the course 2 years ago) have to redo the practicals. If you have any doubts about what criteria apply to you, make sure to the lecturer as soon as possible, so we can discuss it.

Soft- / Hardware and Infrastructure:

  • Required equipment: For the practicals, you need a Windows 7 PC with Visual Studio 2010 and XNA Game Studio 4.0. If you do the practicals using different software, make sure it works on the required equipment.
  • All necessary hard- and software is installed on the computers in the reserved rooms.
  • "Groep indeling" and TA-support: Ignore the "groep indeling" on OSIRIS. There are no groups other than the teams you form with your fellow students, and there are no fixed time slots where you have to be present.


There is an online discussion forum where the TAs and lecturer answer your questions (this is a best-effort offer; no guarantees; in particular, close to deadlines):


Assignment P1: XNA Tutorial
Assignment P2: Basic shaders
Assignment P3: Advanced shaders

(1) Graphics Programming Tutorial

The first assignment is basically a tutorial that teaches you how to set up the framework that we will be using (VisualStudio, XNA, etc.), and introduce you to some of the basics of graphics programming.


(2) Shader Programming

In the second assignment you will learn some basic shader programming.


(3) Free Will

In the third assignment offers you two options: advanced shader programming and ray tracing.


Assignment P1

The first assignment is a tutorial gives you a walk-through of the XNA framework that we'll be using. It will also introduce some of the basics of graphics programming. It is based on an online tutorial written by Riemer Grootjans (see here for Riemer's 3D Series 1: Terrain tutorial). If you do not feel challenged enough from this course and want to learn more, you might want to check out his other tutorials as well. Because we needed to make some adaptations to the tutorial to fit the needs of the course and local restrictions, it is password protected. You get the password in the first lecture (or you can ask your friendly TA about it).



  • Wednesday, May 6, 2015, 23:59h
  • Late submission: May 8, 2015, 12:00 (noon) (with 0.5 points deduction)
  • Very late submission: May 8, 2015, 23:59 (with 1.0 points deduction)


Assignment P2

The goal of the second practical assignment is for you to learn basic shader programming.
You may optionally switch to C++ for this assignment. This is only recommended if you have at least some experience with C++ and/or OpenGL, and want an extra challenge. Rules: first of all, this is a team decision (the 2-3 group size rule still applies). Secondly, inform me. Third, you're on your own: do not expect C++/OpenGL guidance during practica. You may switch back to C# at any time, by again informing me.



  • Tuesday, June 2, 2015, 23:59h
  • Late submission: June 3, 2015, 12:00 (noon) (with 0.5 points deduction)
  • Very late submission: June 3, 2015, 23:59 (with 1.0 points deduction)


Assignment P3

In this final assignment, you will do more advanced shader programming. This assignment will feature various tasks of different levels of difficulty: Easy, Medium and Hard. There are 6 easy, 6 medium and 5 hard tasks. You will be able to compose your assignment by choosing from these tasks. As preliminary knowledge we expect you to have completed the two previous assignments, and understand the workings and purpose of the things you implemented.



  • Tuesday, June 30, 2015, 23:59h
  • Late submission: July 1, 2015, 12:00 (noon) (with 0.5 points deduction)
  • Very late submission: July 1, 2015, 23:59 (with 1.0 points deduction)


Exam & Grading back to navigation


Programming assignments: There will be three programming assignments throughout the semester. The final grading P for your programming assignments makes up 1/3 of your overall grade for this course. P must be at least 5.0 (before rounding) to pass the course.

Exams: There will be a midterm exam T1 and a final exam T2. The final grading T for your exams makes up 2/3 of your overall grade for this course. It is calculated as follows: T = 0.5*T1 + 0.5*T2. T must be at least 5.0 (before rounding) to pass the course.

Final grade: If both T (= the grade for the written exams) and P (= the programming grade) are at least 5.0, the final grade for the course is (2T + P) / 3. Your final grade must be at least 6 (after rounding) to pass the course.


Retake (exams): If you handed in all programming assignments, took part in both written exams, and your final grade for the course is at least 4.0 (before rounding), you are entitled to participate in the retake exam T3. This exam will cover all lectures and tutorials. The result from your retake exam T3 will replace the lower one of your original scores, i.e. either T1 or T2 if and only if it improves your final grade. Criteria for passing stay the same as indicated above (i.e. T must be at least 5.0 before rounding, and your final grade must be at least 6 after rounding). Notice that if you passed the course, you are allowed to participate in the retake exams if you want to improve your grade. In that case, please send a short email note to the lecturer about it, so we know how many exams we have to print.

Retake (practicals): If and only if you failed the course due to the practicals, handed in all programming assignments, took part in both written exams, and your final grade for the course is at least 4.0 (before rounding), you are entitled to participate in the retakes for the practicals. There will be one retake assignment that can replace either P1, P2, or P3 if it improves your final grade. The topic for the retake assignment is decided individually. To get your assignment and related deadlines, contact the instructor on or before Monday, July 14. Unfortunately, there is no retake option for the practicals if you passed the course or if your grade P for the practicals is >5.0.

Exceptions: No rules without exceptions. If you did not participate in either the midterm or the final exam for a good reason and informed us about this before the exam you can take the retake of the exam you missed. In all other cases, it is up to us to decide if we make an exception or not. That is, if you do not match the requirements specified above (e.g. your final grade was just 3.8) but you demonstrated significant effort and feel confident that you can pass this course by participating in the retake, we might make an exception based on your reasons and overall performance. Please be aware, that your chances to get such an exception increase, the earlier you contact us.


To be released.


Literature & Links back to navigation


  • The textbook of this course is Fundamentals of Computer Graphics by Peter Shirley et al.. The course is designed based on the 3rd edition of the book. Since the basics (which we are covering) did not change that much, older editions might work, too (no promises).
  • Here is the web page of the text book.

Additional resources for the practicals:

Resources that might be helpful, especially for programming assignment 2 and 3:

Web references:


News Archive back to navigation

Old posts

June 18:

June 16:

  • Slides for lecture 12 are available.
  • Extensive list of possible exam questions: here. Please check before final lecture.

June 12:

June 11:

  • P2 grade sheet with detailed breakdown and scoring details, by popular demand.
  • Updated grades: handing in P2 12 hours late was penalized with 1pt instead of 0.5.

June 10:

  • Updated grades with 0.3pts for the midterm exam, and P2 grades available.

June 9:

  • Additional assets for P3 are ready for download.
  • Slides for lecture 10 are now available.
  • Tutorial sheet 5 (final sheet) is also available.

June 4:

June 2:

  • Answers for the Midterm Exam are online. Discuss during tutorial on June 4th.
  • Slides for lecture 8 are now available.
  • Tutorial sheet 4 is now available, complete with solutions. Visit the tutorial on Thursday June 4th!
  • Practicum P3 is now available. Deadline has been extended to Tuesday June 30th!

May 29:

  • Grades for the Midterm Exam are now available: get them here.

May 19:

May 18:

May 15:

  • Grades for practicum P1 are available: get them here.

May 12:

  • Solutions for tutorial 3 are now available.
  • Slides for lecture 6 are now available, with the fixed combined canonical view volume matrix on slide 19.
  • Correct way to find a vector perpendicular to a 3D vector (x,y,z): swap two components (at least one of them non-zero), negate one (must be non-zero), make remaining element zero. E.g., (-y,x,0). This has been fixed in the tutorial 2 solutions. Thanks Ruben Meuwese!

May 6:

May 4:

April 30:

  • Slides for the guest lecture by Tigran Gasparian are now available.
  • Practical assignment 2 is now available; introduced by Tigran Gasparian today.
  • Second tutorial is now available.
  • Solution sheet for tutorial 1 is now available.

April 28:

April 23:

  • Slides for lecture 2 are now online.
  • First tutorial added.
  • NOTE: first PRACTICUM will take place on Tuesday April 28 at 09.00.
  • NOTE: first TUTORIAL will take place on Thursday April 30 at 15.15.

April 21:

  • Missing files for P1 added (thanks Cas Fahrenfort!).
  • The slides for lecture 1 are now online. See the lectures section for a download link.
  • The first practicum assignment is now online. See the practica section for a download link.

April 13:

  • Website online.
  • Please mail the lecturer ( immediately if you think that something is incorrect.