1. Disclaimer
  2. Cover
  3. Overview
  4. Output an Image
    1. The PPM Image Format
    2. Creating an Image File
    3. Adding a Progress Indicator
  5. The vec3 class
    1. Color Utility Functions
  6. Rays, a Simple Camera, and Background
    1. The ray class
    2. Sending Rays Into the Scene
  7. Adding a Sphere
    1. Ray-Sphere Intersection
    2. Creating Our First Raytraced Image
  8. Surface Normals and Multiple Objects
    1. Shading with Surface Normals
    2. Simplifying the Ray-Sphere Intersection Code
    3. An Abstraction of Hittable Objects
    4. Front Faces Versus Back Faces
    5. A List of Hittable Objects
    6. Some New C++ Features
    7. Common Constants and Utility Functions
    8. An Interval Class
  9. Moving Camera Code Into Its Own Class
  10. Antialiasing
    1. Some Random Number Utilities
    2. Generating Pixels with Multiple Samples
  11. Diffuse Materials
    1. A Simple Diffuse Material
    2. Limiting the Number of Child Rays
    3. Fixing Shadow Acne
    4. True Lambertian Reflection
    5. Using Gamma Correction for Accurate Color Intensity
  12. Metal
    1. An Abstract Class for Materials
    2. A Data Structure to Describe Ray-Object Intersections
    3. Modeling Light Scatter and Reflectance
    4. Mirrored Light Reflection
    5. A Scene with Metal Spheres
    6. Fuzzy Reflection
  13. Dielectrics
    1. Refraction
    2. Snell's Law
    3. Total Internal Reflection
    4. Schlick Approximation
    5. Modeling a Hollow Glass Sphere
  14. Positionable Camera
    1. Camera Viewing Geometry
    2. Positioning and Orienting the Camera
  15. Defocus Blur
    1. A Thin Lens Approximation
    2. Generating Sample Rays
  16. Where Next?
    1. A Final Render
    2. Next Steps
  17. Acknowledgments
  18. Citing This Book
    1. Basic Data
    2. Snippets