/* charles.c * * Entry point for Charles, including main(). * * Eryn Wells */ #include #include #include "basics.h" #include "light.h" #include "material.h" #include "object_sphere.h" #include "object_plane.h" #include "reader_yaml.hh" #include "scene.h" #include "writer_png.h" static void usage(const char *progname) { fprintf(stderr, "Usage: %s [-hv] [-o ] \n", progname); } int main(int argc, const char *argv[]) { Scene scene = Scene(); #if 0 scene.get_ambient().set_intensity(1.0); Material *m1 = new Material(); m1->set_diffuse_color(Color::Red); Material *m2 = new Material(); m2->set_diffuse_color(Color::Green); Material *m3 = new Material(); m3->set_diffuse_color(Color::Blue); Material *m4 = new Material(); m4->set_diffuse_color(Color(1.0, 0.0, 1.0)); // 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); scene.add_shape(s1); scene.add_shape(s2); scene.add_shape(s3); scene.add_shape(s4); // Make a plane /* Plane *p1 = new Plane(Vector3(0, 460, 400), Vector3(0, 1, 0.01)); p1->set_material(m1); scene.add_shape(p1); */ PointLight *l1 = new PointLight(Vector3(0.0, 240.0, 100.0), Color::White, 1.0); scene.add_light(l1); // Render. scene.render(); Writer *writer = new PNGWriter(); scene.write(*writer, OUT_FILE); #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. */ return 0; }