123456789101112131415161718192021222324252627282930313233343536373839404142 |
- #ifndef SCENE_HPP
- #define SCENE_HPP
- #include <embree3/rtcore.h>
- #include <unordered_set>
- #include <unordered_map>
- #include <OBJ_Loader.h>
- #include <Eigen/Dense>
- #include <Eigen/Geometry>
- #include <memory>
- #include "material.hpp"
- struct scene_object {
- material mat;
- scene_object(material&& _mat) : mat(std::move(_mat)){}
- };
- struct mesh_object : scene_object{
- size_t mesh_index;
- mesh_object(size_t mi, material&& _mat) : mesh_index(mi), scene_object(std::move(_mat)){}
- };
- struct sphere_object : scene_object{
- sphere_object(material&& _mat) : scene_object(std::move(_mat)){}
- };
- struct pointlight{
- Eigen::Vector3f pos;
- Eigen::Vector3f color;
- };
- struct scene{
- RTCScene m_scene;
- RTCDevice m_dev;
- std::unordered_set<unsigned int> emitters;
- std::unordered_map<unsigned int, size_t> geom_id_to_object_index_map;
- std::vector<objl::Mesh> added_meshes;
- std::vector<pointlight> pointlight;
- std::vector<std::unique_ptr<scene_object>> added_objects;
- scene(RTCDevice sc);
- unsigned int add_object(const objl::Mesh& mesh, const Eigen::Matrix4f& transform, bool emitter = false);
- unsigned int add_object(size_t mesh_index, const Eigen::Matrix4f& transform, bool emitter = false);
- unsigned int add_sphere(const Eigen::Vector3f& pos, float rad, bool emitter = false);
- void build();
- };
- scene get_scene(RTCDevice dev);
- #endif
|