Seminars

Syllabus

Week Date Content
1. 23.9. Introduction
2. 30.9. Team forming
Homework assignment I
3. 7.10. Homework assignment I - consultation
4. 14.10. Homework assignment I - consultation
Crash course in Memory management
5. 21.10. Homework assignment I - submission
Homework assignment II
6. 28.10. Public holiday
Homework assignment II - consultation (online)
7. 4.11. Homework assignment II - submission
Homework assignment III
8. 11.11. Homework assignment III - consultation
9. 18.11. Homework assignment III - consultation
10. 25.11. Homework assignment III - submission
Homework assignment IV
11. 2.12. Homework assignment IV - consultation
12. 9.12. Test
Homework assignment IV - submission
Homework assignment V
13. 16.12. Homework assignment V - consultation
31.12. Homework assignment V - submission
14. 6.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)
    • Automatic evaluation:
      • Images diff
      • Speed competition
    • Manual evaluation:
      • 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, which is the fixed (immutable) interface of SGL from your point of view
  • Implement functions in sgl-{cpp,rust,zig}/src/*
  • Switch contexts using keys 0-9

Homework Assignment I

2D Graphics Library, part A

Presentation

  • 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 an error of 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

transformations
transformations

transformation stack
transformation stack

Homework Assignment II

2D Graphics Library, part B

Presentation

  • 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

Presentation

Test scenes and reference images

sphere
sphere

Cornell box
Cornell box

sphere on floor
sphere on floor

Homework Assignment IV

Simple Ray Tracer, part B

Presentation

  • 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
shadows

reflections and refractions
reflections and refractions

multiple reflections and refractions
multiple reflections and refractions

Homework Assignment V

Simple Ray Tracer, part C

Presentation

  • 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 (HDR images):
    • 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: 2024/10/10 23:47 by hendrij