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