summaryrefslogtreecommitdiff
path: root/hw6/bin/HW5.cpp
blob: 2908fb6be80aecb2c1137f44b0adece09f88b871 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#include <string>
#include <chrono>
#include <iostream>

#include "util.h"
#include "image.h"
#include "scene.h"
#include "imageIO.h"
#include "sceneIO.h"

int main(int argc, char** argv)
{
  // parse command line
  if(argc < 2)
  {
    std::cout << "Usage: " << argv[0] << " <scene.xml> [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 << "...";
    auto startImport = std::chrono::system_clock::now();

    scene s;
    importScene(filename, s);

    auto endImport = std::chrono::system_clock::now();
    std::chrono::duration<float> durationImport = endImport - startImport;
    std::cerr << durationImport.count() << " seconds." << std::endl;

    // render
    std::cerr << " * Rendering... ";
    auto startTime = std::chrono::system_clock::now();

    image result = s.render();

    auto endTime = std::chrono::system_clock::now();
    std::chrono::duration<float> duration = endTime - startTime;
    std::cerr << duration.count() << " seconds." << std::endl;

    // save image (both pfm and ppm)
    std::cerr << " * Writing result." << std::endl;
    exportImage(getFilename(filename) + ".pfm", result);
    exportImage(getFilename(filename) + ".ppm", result);
  }

  // Done.
  return 0;
}