This page is located in archive.



Week Date Content
1. 1.10. Introduction
2. 8.10. Team forming
Homework assignment I
3. 15.10. Homework assignment I - consultation
4. 22.10. Homework assignment I - submission
Homework assignment II
5. 29.10. Homework assignment II consultation
6. 5.11. Homework assignment II - submission
Homework assignment III
7. 12.11. Homework assignment III - consultation
8. 19.11. Homework assignment III - submission
Homework assignment IV
9. 26.11. Homework assignment IV - consultation
10. 3.12. Homework assignment IV - submission
Homework assignment V
11. 10.12. Test
Homework assignment V - consultation
12. 17.12. Homework assignment V - submission
13. 7.1. Assessment

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 11th 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
  • Submission:
  • 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: testapp.zip
    • Use CMake to generate makefile or VS solution
    • Windows: freeglut binaries are part of the zip file
    • Linux/MacOS: GLUT installation (e.g. freeglut using brew)
  • Test application calls SGL functions defined in sgl/sgl.h, so don't change it!
  • Implement functions in sgl/sgl.cpp
  • Add your h/cpp files to sgl/
  • 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

sphere (sphere.nff)

Cornell box (cornell.nff)
Cornell box

sphere on floor (floor_sph.nff)
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

shadows (cornell-blocks.nff)

reflections and refractions (cornell-spheres.nff)
reflections and refractions

multiple reflections and refractions (cornell-spheres-crazy.nff)
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 (cornell-blocks-arealight.nff)
area light source

color area light source (cornell-blocks-arealight-color.nff)
color area light source

environment map St. Peter's Basilica (basilica.nff/stpeters_probe.hdr)
environment map St. Peter's Basilica

environment map St. Uffizi Gallery (uffizi.nff/uffizi_probe.hdr)
environment map St. Uffizi Gallery

courses/b4m39apg/seminars/start.txt · Last modified: 2018/12/18 19:12 by meistdan