diff --git a/src/Parser.cc b/src/Parser.cc index 259d1d4..7dd1b76 100644 --- a/src/Parser.cc +++ b/src/Parser.cc @@ -71,9 +71,13 @@ Geometry *Parser::getGeometry(const nlohmann::json &j) { return g; } -// TODO: return four corners for rectangles and area lights +// helper function to get four corners of a rectangle const Matrix getCorners(const nlohmann::json &j) { - return Matrix(); + Matrix corners; + for (int i = 0; i < 4; ++i) { + corners.col(i) = getVector3f(j["p" + std::to_string(i + 1)]); + } + return corners; } Sphere *Parser::getSphere(const nlohmann::json &j, float ka, float kd, float ks, diff --git a/src/RayTracer.cc b/src/RayTracer.cc index 3f04ca6..b130c70 100644 --- a/src/RayTracer.cc +++ b/src/RayTracer.cc @@ -9,6 +9,9 @@ using std::vector; void RayTracer::parse() { for (auto i = json["output"].begin(); i != json["output"].end(); ++i) scenes.push_back(Parser::getScene(*i)); + + for (auto i = json["geometry"].begin(); i != json["geometry"].end(); ++i) + geometries.push_back(Parser::getGeometry(*i)); } void RayTracer::render() {} diff --git a/src/RayTracer.h b/src/RayTracer.h index 427a469..1c18f19 100644 --- a/src/RayTracer.h +++ b/src/RayTracer.h @@ -2,6 +2,8 @@ #define RAY_TRACER_H_ #include "../external/json.hpp" +#include "Geometry.h" +#include "Light.h" #include "Scene.h" #include @@ -14,6 +16,8 @@ public: private: nlohmann::json json; std::vector scenes; + std::vector lights; + std::vector geometries; void parse(); void render();