Warning

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 |

- 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

- Simple graphics library (SGL) divided into 5 assignments
- Team of two people
- Submission:
- Manual evaluation: https://cw.felk.cvut.cz/brute/
- Clear code, comments, etc.
- Functionality

- Automatic evaluation: https://apg.courses.dcgi.fel.cvut.cz/
- Images diff
- Speed competition

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

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

shadows (cornell-blocks.nff)

reflections and refractions (cornell-spheres.nff)

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

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

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

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

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

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

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