refactor RayTracer class

This commit is contained in:
Shuo Feng 2024-02-01 18:43:10 -05:00
parent baea2db514
commit 90e0cfb632
Signed by: sfeng
GPG key ID: 1E83AE6CD1C037B1
2 changed files with 18 additions and 24 deletions

View file

@ -1,33 +1,24 @@
#include "RayTracer.h"
#include "../external/simpleppm.h"
#include "Scene.h"
#include <iostream>
#include <string>
#include <vector>
RayTracer::RayTracer(nlohmann::json scene) : scene(scene) {}
RayTracer::RayTracer(nlohmann::json json)
: json(json), scene(Scene(json["output"])) {}
void RayTracer::render() {
int width = scene.getWidth();
int height = scene.getHeight();
std::vector<double> buffer(3 * width * height);
save_ppm(scene.getName(), buffer, width, height);
}
void RayTracer::run() {
std::string filename;
int sizeX = -1, sizeY = -1;
for (auto itr = scene["output"].begin(); itr != scene["output"].end();
++itr) {
std::cout << scene.getName() << std::endl
<< scene.getWidth() << " " << scene.getHeight() << std::endl;
if (itr->contains("filename")) {
filename = (*itr)["filename"].get<std::string>();
std::cout << filename << std::endl;
}
if (itr->contains("size")) {
sizeX = (*itr)["size"].begin()->get<int>();
sizeY = ((*itr)["size"].begin() + 1)->get<int>();
std::cout << sizeX << " " << sizeY << std::endl;
}
}
std::vector<double> buffer(3 * sizeX * sizeY);
save_ppm(filename, buffer, sizeX, sizeY);
render();
}

View file

@ -2,14 +2,17 @@
#define RAY_TRACER_H_
#include "../external/json.hpp"
#include "Scene.h"
class RayTracer {
public:
RayTracer(nlohmann::json);
void render();
void run();
private:
nlohmann::json scene;
Scene scene;
nlohmann::json json;
};
#endif // !RAY_TRACER_H_