charles/src/charles.cc

112 lines
2.5 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
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[])
{
2013-09-10 21:02:40 -07:00
Scene scene = Scene();
2013-09-07 16:10:42 -07:00
2014-07-13 18:06:21 -07:00
#if 0
2013-09-13 18:23:36 -07:00
scene.get_ambient().set_intensity(1.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);
Material *m4 = new Material();
m4->set_diffuse_color(Color(1.0, 0.0, 1.0));
2013-09-10 21:02:40 -07:00
// Make some spheres.
Sphere *s1 = new Sphere(Vector3(233, 290, 0), 80.0);
Sphere *s2 = new Sphere(Vector3(407, 290, 0), 80.0);
Sphere *s3 = new Sphere(Vector3(320, 140, 0), 80.0);
Sphere *s4 = new Sphere(Vector3(620, 360, 0), 20.0);
s1->set_material(m1);
s2->set_material(m2);
s3->set_material(m3);
s4->set_material(m4);
2013-09-10 21:02:40 -07:00
scene.add_shape(s1);
scene.add_shape(s2);
scene.add_shape(s3);
scene.add_shape(s4);
2013-09-08 20:46:22 -07:00
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
*/
2013-09-22 10:16:32 -07:00
PointLight *l1 = new PointLight(Vector3(0.0, 240.0, 100.0), Color::White, 1.0);
2013-09-11 08:38:39 -07:00
scene.add_light(l1);
2013-09-10 21:02:40 -07:00
// Render.
scene.render();
2013-09-08 20:46:22 -07:00
2013-09-10 21:02:40 -07:00
Writer *writer = new PNGWriter();
scene.write(*writer, OUT_FILE);
2014-07-13 18:06:21 -07:00
#endif
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':
/* TODO: Verbosity levels. */
break;
}
}
if (optind >= argc) {
fprintf(stderr, "Input file required.\n");
usage(argv[0]);
return -1;
}
infile = argv[optind];
/* Parse YAML files. */
YAMLReader reader(scene);
for (int i = optind; i < argc; i++) {
reader.read_file(infile);
}
/* TODO: Call tracer. */
/* TODO: Write rendered scene to PNG file. */
2013-09-07 16:10:42 -07:00
return 0;
}