This page is located in archive. Go to the latest version of this course pages. Go the latest version of this page.



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