Warning

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. | 20.9. | Introduction |

2. | 27.9. | Team forming Homework assignment I |

3. | 4.10. | Homework assignment I - consultation |

4. | 11.10. | Homework assignment I - consultation |

5. | 18.10. | Homework assignment I - submission Homework assignment II |

6. | 25.10. | Homework assignment II consultation Memory management |

7. | 1.11. | Homework assignment II - submission Homework assignment III |

8. | 8.11. | Homework assignment III - consultation |

9. | 15.11. | Homework assignment III - submission Homework assignment IV |

10. | 22.11. | Homework assignment IV - consultation |

11. | 29.11. | Homework assignment IV - submission Homework assignment V |

12. | 6.12. | Test Homework assignment V - consultation |

13. | 13.12. | Homework assignment V - consultation |

20.12. | Homework assignment V - submission | |

14. | 3.1. | Assessment Speed competition workshop Misc topics |

- 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

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

- 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

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

- Scene definition via SGL API (see sgl.h)
- Primary rays generation:
- Transformation matrix inverse

- Phong lighting model:
- Material definition (see sglMaterial)
- Diffuse coefficients: [r*kd g*kd b*kd]
- Specular coefficients: [ks ks ks]

- BONUS:
- Adaptive anti-aliasing (1 point),
- Multiple lighting models support: Cook-Torrance or Ward (1 point)

- Shadow rays
- Secondary Rays: recursive ray tracing:
- Reflections and refractions
- Max. recursion depth 8

- Backface culling: ignore intersections if DotProd(normal,dir)>0.0
- BONUS:
- Depth of field (1 point)

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

environment map St. Peter's Basilica

(stpeters_probe.hdr)

environment map St. Uffizi Gallery

(uffizi_probe.hdr)

courses/b4m39apg/seminars/start.txt · Last modified: 2021/10/19 00:06 by hendrij