#ifndef SCENE_HPP #define SCENE_HPP #include #include #include #include #include #include #include #include "texture.hpp" struct scene_object {}; struct mesh_object : scene_object{ size_t mesh_index; std::unique_ptr tex; mesh_object(size_t mi, std::unique_ptr&& _tex) : mesh_index(mi), tex(std::move(_tex)){} }; struct sphere_object : scene_object{ std::unique_ptr tex; sphere_object(std::unique_ptr&& _tex) : tex(std::move(_tex)){} }; 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