#ifndef SCENE_H #define SCENE_H SCENE_H #include #include #include #include #include "util/Ray.h" #include "util/Color.h" #include "shapes/Shape.h" #include "Light.h" #define SCENE_MAX_TRANSPARENT_HITS 8 #define SCENE_TRANSPARENCY_THRESHOLD 0.01 class Scene { public: /* types */ class ShapeDistance : public std::pair { public: ShapeDistance(Shape * shape, double dist) : std::pair(shape, dist) { }; }; Scene(const std::map & options, const char * filename); ~Scene(); void render(); protected: /* private methods */ void load(const char * filename); void renderPixel(int x, int y, unsigned char * pixel); Color traceRay(const Ray & ray); std::vector getRayHits(const Ray & ray); /* rendering parameters */ int m_width; int m_height; int m_multisample_level; std::string m_output_file_name; bool m_verbose; double m_vfov; /* private data */ std::vector m_shapes; std::vector m_lights; Transform m_transform; double m_view_plane_dist; int m_multisample_level_squared; double m_sample_span; double m_half_sample_span; /* framebuffer */ unsigned char * m_data; }; bool operator<(const Scene::ShapeDistance & sd1, const Scene::ShapeDistance & sd2); #endif