Files
PhotonMF/scene.hpp
Miguel Angel Astor Romero 5970be923b Assorted bug fixes.
2017-01-20 12:13:42 -04:00

51 lines
1.1 KiB
C++

#pragma once
#ifndef SCENE_HPP
#define SCENE_HPP
#include <string>
#include <vector>
#include <stdexcept>
#include <json_spirit_value.h>
#include "camera.hpp"
#include "figure.hpp"
#include "light.hpp"
#include "material.hpp"
#include "environment.hpp"
using std::string;
using std::vector;
using std::runtime_error;
using json_spirit::Value;
typedef enum LIGHT_TYPE { DIRECTIONAL, POINT, SPOT } light_type_t;
class SceneError: public runtime_error {
public:
explicit SceneError(const string & what_arg): runtime_error(what_arg) { }
};
class Scene {
public:
vector<Figure *> m_figures;
vector<Light *> m_lights;
Environment * m_env;
Camera * m_cam;
Scene(const char * file_name, int h = 480, int w = 640, float fov = 90.0f);
~Scene();
private:
void read_vector(Value & val, vec3 & vec);
void read_environment(Value & v);
void read_camera(Value & v);
Material * read_material(Value & v);
Figure * read_sphere(Value & v);
Figure * read_plane(Value & v);
Figure * read_disk(Value & v);
Light * read_light(Value & v, light_type_t t);
};
#endif