charles/src/charles.cc

113 lines
2.3 KiB
C++
Raw Normal View History

/* charles.c
*
* Entry point for Charles, including main().
*
* Eryn Wells <eryn@erynwells.me>
*/
2013-09-09 22:48:52 -07:00
#include <cstdio>
2014-07-13 18:06:21 -07:00
#include <unistd.h>
2013-09-07 16:10:42 -07:00
#include "basics.h"
2013-09-11 08:38:39 -07:00
#include "light.h"
#include "material.h"
2013-09-10 21:02:40 -07:00
#include "object_sphere.h"
2013-09-22 10:16:32 -07:00
#include "object_plane.h"
2014-07-13 18:06:21 -07:00
#include "reader_yaml.hh"
2013-09-10 21:02:40 -07:00
#include "scene.h"
#include "writer_png.h"
2013-09-07 16:10:42 -07:00
2014-07-13 18:06:21 -07:00
int verbosity = 0;
2014-07-13 18:06:21 -07:00
static void
usage(const char *progname)
{
fprintf(stderr, "Usage: %s [-hv] [-o <outfile>] <infile ...>\n", progname);
}
2013-09-07 16:10:42 -07:00
int
main(int argc,
const char *argv[])
{
Scene scene;
2013-09-07 16:10:42 -07:00
2013-09-13 18:23:36 -07:00
scene.get_ambient().set_intensity(1.0);
#if 0
Material *m1 = new Material();
2013-09-13 18:39:31 -07:00
m1->set_diffuse_color(Color::Red);
Material *m2 = new Material();
2013-09-13 18:39:31 -07:00
m2->set_diffuse_color(Color::Green);
Material *m3 = new Material();
2013-09-13 18:39:31 -07:00
m3->set_diffuse_color(Color::Blue);
2013-09-10 21:02:40 -07:00
// Make some spheres.
Sphere *s1 = new Sphere(Vector3(0, 0.5, 2), 0.33);
Sphere *s2 = new Sphere(Vector3(-0.33, 0, 2), 0.33);
Sphere *s3 = new Sphere(Vector3(0.33, 0, 2), 0.33);
s1->set_material(m1);
s2->set_material(m2);
s3->set_material(m3);
2013-09-10 21:02:40 -07:00
scene.add_shape(s1);
scene.add_shape(s2);
scene.add_shape(s3);
2013-09-22 10:16:32 -07:00
// Make a plane
2014-07-13 07:43:18 -07:00
/*
Plane *p1 = new Plane(Vector3(0, 460, 400), Vector3(0, 1, 0.01));
2013-09-22 10:16:32 -07:00
p1->set_material(m1);
scene.add_shape(p1);
2014-07-13 07:43:18 -07:00
*/
#endif
2013-09-22 10:16:32 -07:00
PointLight *l1 = new PointLight(Vector3(6.0, -4.0, 2), Color::White, 1.0);
2013-09-11 08:38:39 -07:00
scene.add_light(l1);
2014-07-13 18:06:21 -07:00
std::string outfile, infile;
int opt;
while ((opt = getopt(argc, (char *const *)argv, "ho:v")) != -1) {
switch (opt) {
case 'h':
usage(argv[0]);
break;
case 'o':
outfile = optarg;
break;
case 'v':
++verbosity;
2014-07-13 18:06:21 -07:00
break;
}
}
if (optind >= argc) {
fprintf(stderr, "Input file required.\n");
usage(argv[0]);
return -1;
}
infile = argv[optind];
if (outfile.empty()) {
outfile = "charles_out.png";
}
2014-07-13 18:06:21 -07:00
/* Parse YAML files. */
YAMLReader reader(scene);
for (int i = optind; i < argc; i++) {
reader.read_file(infile);
}
/* Call tracer. */
scene.render();
/* Write rendered scene to PNG file. */
PNGWriter writer;
scene.write(writer, outfile);
2013-09-07 16:10:42 -07:00
return 0;
}