- Tuples, Points, and Vectors
- Drawing on a canvas
- Matrices
- Matrix Transformations (WIP)
- Translation
- Scaling
- Rotation
- Shearing
- Chaining Transformations
- Putting it Together
- All tests
- Ray-Sphere Intersections
- Light and Shading
- Making a Scene
- Shadows
- Planes
- Patterns
- Reflection and Refraction
- Cubes
- Cylinders
- Groups
- Triangles
- Constructive Solid Geometry (CSG)
- Next Steps
- Replace
MVector
with non heap-alloc'd array types. Consider- SVector (disadvantage: immutable, in-place modification not possible) Consider trying this in another source file and writing benchmarks to compare the two
- SIMD.jl vector types (
*(::SMatrix{4,4,T}, ::Vec{4, T})
needs to be implemented).
- Create benchmarks
- Refactor tests
- Make README.md more presentable
- Implement an SoA type for storing
Vec3
s andPoint
s whose interface is similar to AoS (e.g. a regularVector{Vec3}
). - Multithreading
- Load-balancing
- GPU acceleration
- CUDA kernels
- Vendor-agnostic kernels
Heap-alloc'd data types are out of the question. While I am concerned about the immutability of SVectors, I do not know for certain if mutating them is a common case or not. If "Ray Tracing in One Weekend" is anything to go by, it most definitely is as we compute a running average. The alternative would be the a much more memory-heavy allocation of an array of Vectors of and subsequent reduction.
Note to self: When in doubt, just measure and benchmark.