This page is located in archive.



Week Date Content
1. 25.9. Introduction
2. 2.10. Team forming
Homework assignment I
3. 9.10. Homework assignment I - consultation
Memory management
4. 16.10. Homework assignment I - consultation
5. 23.10. Homework assignment I - submission
Homework assignment II
6. 30.10. Homework assignment II - consultation
7. 6.11. Homework assignment II - submission
Homework assignment III
8. 13.11. Homework assignment III - consultation
9. 20.11. Dean's day
Homework assignment III - consultation (online)
10. 27.11. Homework assignment III - submission
Homework assignment IV
11. 4.12. Homework assignment IV - consultation
12. 11.12. Test
Homework assignment IV - submission
Homework assignment V
13. 18.12. Homework assignment V - consultation
31.12. Homework assignment V - submission
14. 8.1. Assessment
Speed competition workshop
Misc topics

Rules of the Game

  • 5 homework assignments: 50 points (10 points each) + bonus points
    • All assignments must be accepted
    • Later submissions are penalized by 3 points for each week of delay!
  • Test in the 12th week for up to 10 points
  • At least 30 points for the assessment

Homework Assignments

  • Simple graphics library (SGL) divided into 5 assignments
  • Team of two people (possibly across all course parallels, if need be)
  • Submission:
    • Automatic & manual evaluation: https://cw.felk.cvut.cz/brute/
      • Images diff
      • Speed competition
      • Clean build & run
      • Clear code, comments, etc.
      • Functionality
  • Speed competition (homework assignments I, II, III):
    • 3 bonus points for the 1st fastest solution
    • 2 bonus points for the 2nd fastest solution
    • 1 bonus point for the 3rd fastest solution

Test Application

  • Test application using GLUT for all homework assignments: sgl+testapp.zip
    • Use CMake to generate makefile or VS solution
      • New: using CMake variable SGL_BACKEND, you can choose to code either in the C++ (the default), Rust, or Zig language
    • Windows: freeglut binaries are part of the zip file
    • Linux/MacOS: GLUT installation (e.g. freeglut using brew)
  • Test application calls SGL functions declared in sgl-{cpp,rust,zig}/include/sgl.h, that is the fixed interface of SGL
  • Implement functions in sgl-{cpp,rust,zig}/src/*
  • Switch contexts using keys 0-9

Homework Assignment I

2D Graphics Library, part A


  • Library initialization, data structures design
  • Rasterization of basic primitives:
    • Point
    • Line and polyline (Bresenham's algorithm)
    • Circle (Bresenham's algorithm)
    • Ellipse (sglEllipse) and arc (sglArc):
      • Approximation of ellipse by 40 line segments
      • Approximation of arc by 40*(from-to)/(2 PI) line segments
      • BONUS:
        • Adaptive approximation of ellipse and arc with the error less than 1 pixel (1 point)
  • Transformations:
    • Modeling transformations (translation, rotation, scale)
    • Orthographic projection (sglOrtho)
    • Viewport transformation
    • Transformation stack

Reference Images

graphics elements
graphics elements


transformation stack
transformation stack

Homework Assignment II

2D Graphics Library, part B


  • Non-convex polygon filling:
    • Polygon definition (sglBegin(SGL_POLYGON))
    • Self-intersecting polygon filling, so don't use seed filling!
  • Filling circle, ellipse, and arc
  • Perspective projection (sglFrustum)
  • Depth management via z-buffer
  • BONUS:

Reference Images

non-convex polygon filling
non-convex polygon filling

graphics elements filling
graphics elements filling

3D scene rendering - cube with z-buffer enabled/disabled
3D scene rendering - cube with z-buffer enabled/disabled

3D scene rendering - NFF file
3D scene rendering - NFF file

Homework Assignment III

Simple Ray Tracer, part A


Test scenes and reference images


Cornell box
Cornell box

sphere on floor
sphere on floor

Homework Assignment IV

Simple Ray Tracer, part B


  • Shadow rays
  • Secondary Rays: recursive ray tracing:
  • Backface culling: ignore intersections if DotProd(normal,dir)>0.0
  • BONUS:
    • Depth of field (1 point)

Test Scenes and Reference Images


reflections and refractions
reflections and refractions

multiple reflections and refractions
multiple reflections and refractions

Homework Assignment V

Simple Ray Tracer, part C


  • Area light sources:
    • Emissive materials support (see sglEmissiveMaterial)
    • Point sampling on triangles, 16 samples per triangle
    • Intensity of light samples (Phong lighting model):
      • sample_i = (r,g,b)*cos fi*(light_triangle_area/num_samples)/(c0 + c1*d + c2*d^2)
      • cos fi = DotProd(light_triangle_normal, -shadow_ray.direction)
  • Environment mapping:
    • Use environment map instead of constant background color (see sglEnvironmentMap)
    • Mapping ray direction to environment map coordinates (u,v) [0,1]x[0,1]:
      • d = sqrt(dir.x^2 + dir.y^2)
      • r = d>0 ? acos(dir.z)/(2*PI*d) : 0.0
      • u = 0.5 + dir.x * r
      • v = 0.5 + dir.y * r
  • BONUS:
    • Textures support (2 points)

Test Scenes and Reference Images

area light source
area light source

color area light source
color area light source

environment map St. Peter's Basilica
environment map St. Peter's Basilica

environment map St. Uffizi Gallery
environment map St. Uffizi Gallery

courses/b4m39apg/seminars/start.txt · Last modified: 2023/09/25 10:01 by hendrij