Decided to try Peter Shirley's Ray Tracing in One Weekend book.
My implementation differs a bit from the one present in the book:
Decided not to use object oriented programming, to avoid additional indirection.
Material stores material properties and pointer to scatter function directly (not through VMT).
Instead of checking if ray sphere intersection is near ray origin (In case ray originated from just below the sphere), i decided to ignore exiting intersection (h + sqrt (delta)) if ray should have originated from the outside. I kept a flag marking if ray is inside an object (to handle glass).
Program runs on multiple threads (each with it's own random number generator)
Used stb_image to write output to png files.
Project builds with Visual Studio 2022.
Set Project -> Properties -> C/C++ -> Additional Include Directories
to point to your installations of glm and stb.