#pragma once #include "../lib/mathlib.h" #include "trace.h" namespace PT { template class List { public: List() {} List(std::vector &&primitives) : prims(primitives) {} BBox bbox() const { BBox ret; for (const auto &p : prims) { ret.enclose(p.bbox()); } return ret; } Trace hit(const Ray &ray) const { Trace ret; for (const auto &p : prims) { Trace test = p.hit(ray); ret = Trace::min(ret, test); } return ret; } void append(Primitive &&prim) { prims.push_back(std::move(prim)); } private: std::vector prims; }; } // namespace PT