charles/src/scene.h
Eryn Wells 79c951030d Move Stats to its own module
Move Stats to its own module and pass it around to the intersection methods to keep track of how many tests and successful intersections there are.
2014-08-02 15:21:14 -07:00

81 lines
1.7 KiB
C++

/* scene.h
*
* Definition of the Scene class.
*
* Scenes are the top level object in charles. Scenes contain objects, lights, a camera,
* etc. and can be rendered to pixel data and written to a file.
*
* Eryn Wells <eryn@erynwells.me>
*/
#ifndef __SCENE_H__
#define __SCENE_H__
#include <list>
#include <string>
#include "basics.h"
#include "camera.h"
#include "object.h"
#include "stats.hh"
class AmbientLight;
class PointLight;
class Writer;
class Scene
{
public:
Scene();
~Scene();
bool is_rendered() const;
int get_width() const;
void set_width(int w) { width = w; }
int get_height() const;
void set_height(int h) { height = h; }
Camera::Ptr GetCamera() const;
void SetCamera(Camera* camera);
AmbientLight &get_ambient() const;
const Color *get_pixels() const;
void read(const std::string &filename);
void write(Writer &writer, const std::string &filename);
void render();
void add_shape(charles::Object::Ptr obj);
void add_light(PointLight *light);
private:
Color trace_ray(const Ray &ray, const int depth = 0, const float weight = 1.0);
// Pixel dimensions of the image.
int width, height;
Camera::Ptr mCamera;
/*
* Ray tracing parameters. max_depth indicates the maximum depth of the ray tree. min_weight indicates the minimum
* specular weight to apply before giving up.
*/
int max_depth;
float min_weight;
// Scene objects.
AmbientLight *ambient;
std::list<charles::Object::Ptr> shapes;
std::list<PointLight *> lights;
// Rendering stats
charles::Stats mStats;
// Rendering output.
bool _is_rendered;
Color *pixels;
};
#endif