A simple raytracer built in Rust as I work through The Ray Tracer Challenge.
You're of course welcome to poach whatever you want from this, but I'd advise you to probably just walk right on by my step definitions for the Cucumber tests, because they were written in the most absolutely brainless head-down one-thing-at-a-time I'm-the-Juggernaut way possible. Which is arguably fine for this sort of project, but, y'know.
Progress:
- Tuples, Points, and Vectors
- Tuples
- Operations
- Drawing on a Canvas
- Representing Colors
- Implementing Color Operations
- Creating a Canvas
- Saving a Canvas
- Matrices
- Creating a Matrix
- Multiplying Matrices
- The Identity Matrix
- Transposing Matrices
- Inverting Matrices
- Matrix Transformations
- Translation
- Scaling
- Rotation
- Shearing
- Chaining Transformations
- Ray-Sphere Intersections
- Light and Shading
- Making a Scene
- Shadows
- Planes
- Patterns
- Making a Striped Pattern
- Transforming Patterns
- Generalizing Patterns
- Making a Gradient Pattern
- Making a Ring Pattern
- Making a 3D Checkered Pattern
- Reflection and Refraction
- Reflection
- Transparency and Refraction
- Fresnel Effect
- Cubes
- Intersecting a Ray With a Cube
- Finding the Normal on a Cube
- Cylinders
- Intersecting a Ray With a Cylinder
- Finding the Normal on a Cylinder
- Truncating Cylinders
- Capped Cylinders
- Cones
- Groups
- Implementing Groups
- Finding the Normal on a Child Object
- Using Bounding Boxes to Optimize Large Scenes
- Triangles
- Triangles
- Wavefront OBJ Files
- Smooth Triangles
- Smooth Triangles in OBJ Files
- Constructive Solid Geometry (CSG)
- Implementing CSG
- Coloring CSG Shapes
- Next Steps
- Area Lights and Soft Shadows
- Spotlights
- Focal Blur
- Motion Blur
- Anti-Aliasing
- Texture Maps
- Normal Perturbation
- Torus Primitive