nuclear@0: #ifndef SCENE_H_ nuclear@0: #define SCENE_H_ nuclear@0: nuclear@0: #include nuclear@0: #include "object.h" nuclear@0: #include "light.h" nuclear@0: #include "camera.h" nuclear@0: #include "texture.h" nuclear@0: nuclear@0: class Scene { nuclear@0: protected: nuclear@0: std::vector objects; nuclear@0: std::vector lights; nuclear@0: Camera *camera; nuclear@0: nuclear@0: static TargetCamera def_cam; // default camera nuclear@0: nuclear@0: Color bgcolor; nuclear@0: TextureCube *envmap, *envmap_conv; nuclear@0: float fog_start, fog_end; nuclear@0: nuclear@0: public: nuclear@0: Scene(); nuclear@0: virtual ~Scene(); nuclear@0: nuclear@0: virtual bool load(const char *fname); nuclear@0: virtual bool save(const char *fname) const; nuclear@0: nuclear@0: virtual void set_background_color(const Color &color); nuclear@0: virtual void set_fog(float fog_start, float fog_end); nuclear@0: virtual void get_fog(float *fog_start, float *fog_end) const; nuclear@0: nuclear@0: virtual void set_environment_map(TextureCube *map, TextureCube *map_conv = 0); nuclear@0: nuclear@0: virtual void add_object(Object *obj); nuclear@0: virtual Object *get_object(int i) const; nuclear@0: virtual int get_object_count() const; nuclear@0: nuclear@0: virtual void add_light(Light *lt); nuclear@0: virtual Light *get_light(int i) const; nuclear@0: virtual int get_light_count() const; nuclear@0: nuclear@0: virtual void set_camera(Camera *cam); nuclear@0: virtual Camera *get_camera() const; nuclear@0: nuclear@0: virtual bool intersect(const Ray &ray, HitPoint *hit) const; nuclear@0: nuclear@0: virtual Color env_color(const Ray &ray) const; nuclear@0: nuclear@0: virtual void prepare_xform(long msec); nuclear@0: nuclear@0: friend Color trace_ray(const Scene *scn, const Ray &ray, int rdepth); nuclear@0: friend Color shade(const Scene *scn, const Ray &ray, const HitPoint &hit, int rdepth); nuclear@0: }; nuclear@0: nuclear@0: #endif // SCENE_H_