#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; }