From db072ad4dc181eca5a1458656b130beb43f475bf Mon Sep 17 00:00:00 2001 From: 53hornet <53hornet@gmail.com> Date: Sat, 2 Feb 2019 23:33:15 -0500 Subject: Init. --- hw6/bin/HW3.cpp | 86 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 hw6/bin/HW3.cpp (limited to 'hw6/bin/HW3.cpp') diff --git a/hw6/bin/HW3.cpp b/hw6/bin/HW3.cpp new file mode 100644 index 0000000..c18c2d1 --- /dev/null +++ b/hw6/bin/HW3.cpp @@ -0,0 +1,86 @@ +#include +#include +#include + +#include "util.h" +#include "image.h" +#include "scene.h" +#include "imageIO.h" +#include "sceneIO.h" + +image generateImage(const scene& s) +{ + image result(s.getCamera().width(), s.getCamera().height()); + + // for every pixel + for(image::size_type y=0; y < result.height(); y++) + for(image::size_type x=0; x < result.width(); x++) + { + // generate view ray + ray r = s.getCamera()(x,y); + + // intersect scene + intersectionPoint ip = s.intersect(r); + + // shade pixel + if(ip.isHit()) + { + // for each light source + for(unsigned int l=0; l < s.numberOfLightsources(); l++) + { + // connect to light source + lightSample ls = s.getLightsource(l).intensityAt(ip.position()); + + // shade + result(x,y) += ip.shade(ls); + } + } + else result(x,y) = color(0.0f, 0.0f, 0.0f); + } + + + // Done. + return result; +} + + + +int main(int argc, char** argv) +{ + // parse command line + if(argc < 2) + { + std::cout << "Usage: " << argv[0] << " [scene2.xml ...]" << std::endl; + return -1; + } + + // for each filename, import scene and render + unsigned int pos=1; + while(pos < argc) + { + // get filename + std::string filename = argv[pos++]; + + // import + std::cerr << " * Reading " << filename << std::endl; + scene s; + importScene(filename, s); + + // render + std::cerr << " * Rendering... "; + auto startTime = std::chrono::system_clock::now(); + + image result = generateImage(s); + + auto endTime = std::chrono::system_clock::now(); + std::chrono::duration duration = endTime - startTime; + std::cerr << duration.count() << " seconds." << std::endl; + + // save image + std::cerr << " * Writing result." << std::endl; + exportImage(getFilename(filename) + ".ppm", result); + } + + // Done. + return 0; +} -- cgit v1.2.3