#ifndef SCENE_HPP #define SCENE_HPP #include #include #include #include #include #include #include #include "material.hpp" struct scene_object { material mat; scene_object(material&& _mat) : mat(std::move(_mat)){} virtual void kueder(){} }; struct mesh_object : scene_object{ size_t mesh_index; mesh_object(size_t mi, material&& _mat) : mesh_index(mi), scene_object(std::move(_mat)){} virtual void kueder(){} }; struct sphere_object : scene_object{ sphere_object(material&& _mat) : scene_object(std::move(_mat)){} virtual void kueder(){} }; struct pointlight{ Eigen::Vector3f pos; Eigen::Vector3f color; }; struct scene{ RTCScene m_scene; RTCDevice m_dev; std::unordered_set emitters; std::unordered_map geom_id_to_object_index_map; std::vector added_meshes; std::vector pointlight; std::vector> 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