diff --git a/src/hittable_list.h b/src/hittable_list.h new file mode 100644 index 0000000..4ea27a9 --- /dev/null +++ b/src/hittable_list.h @@ -0,0 +1,40 @@ +#pragma once + +#include "hittable.h" + +#include +#include + +class hittable_list : public hittable +{ + public: + hittable_list() {} + hittable_list(std::shared_ptr object) { add(object); } + + void clear() { objects_.clear(); } + void add (std::shared_ptr object) { objects_.push_back(object); } + + virtual bool hit(const ray& r, double t_min, double t_max,hit_record& rec) const; + + private: + std::vector> objects_; +}; + +bool hittable_list::hit(const ray& r, double t_min, double t_max, hit_record& rec) const +{ + hit_record temp_rec; + bool hit_anything = false; + auto closest_so_far = t_max; + + for (const auto& object : objects_) + { + if (object->hit(r, t_min, closest_so_far, temp_rec)) + { + hit_anything = true; + closest_so_far = temp_rec.t; + rec = temp_rec; + } + } + + return hit_anything; +}