This page introduces shadowing in ray tracing, where objects cast shadows on other objects when they block light from reaching them. The ShadowedSphere class extends the basic sphere functionality to include shadow calculations.
Starting from this page, we'll see more of the benefit of the GenericGridGrapher class. The abstract interface it provides allows us to switch between different rendering backends while keeping the same high-level code structure.
This page also marks the transition from SVGGridGrapher to CanvasGridGrapher as our underlying graphing utility. Canvas-based rendering provides better performance for complex ray tracing scenes and will be used on all subsequent days.
Unable to generate image