Warning
This page is located in archive.

Seminars

Syllabus

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

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

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:
    • 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
(stpeters_probe.hdr)
environment map St. Peter's Basilica

environment map St. Uffizi Gallery
(uffizi_probe.hdr)
environment map St. Uffizi Gallery

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