#ifndef SCENE_H #define SCENE_H #include #include "Model.h" #include "Camera.h" #include "Animation.h" #include #include #include #include #define DEFAULT_MTL_DIR "./" class Scene loadOBJtoScene(const char* filename, const char* mtl_directory = DEFAULT_MTL_DIR, const char* texture_directory = DEFAULT_MTL_DIR); class Scene loadGLTFtoScene(std::string filename); // Класс сцены class Scene { public: Scene(); // Конструктор пустой сцены Scene(const Scene ©); // Конструктор копирования Scene& operator=(const Scene& other); // Оператор присваивания void render(ShaderProgram &shaderProgram, UBO &material_buffer, UBO *bones_buffer = NULL, bool recalc_animations = false); // Рендер сцены void set_group_id(GLuint64 id, GLuint etc = 0); // Изменение флага записи идентификатора для всех моделей Node root; // Корневой узел // Списки объектов, выступающих узлами std::list nodes; // Список пустых узлов std::list models; // Список моделей для рендера std::list cameras; // Список камер std::list bones; // Узлы, выступающие в роли костей std::list skeletons; // Скелеты std::vector animations; // Список анимаций std::map animation_names; // Имя анимации - индекс protected: void rebuld_tree(const Scene& from); // Перестройка дерева после копирования или присваивания template void rebuild_Nodes_list(T& nodes, const Scene& from); // Перестройка узлов выбранного списка template void move_parent(Node& for_node, const std::list& from_nodes, std::list& this_nodes); // Сдвигает родителя узла между двумя списками при условии его принадлежности к оригинальному template void move_animation_target(Node*& target, const std::list& from_nodes, std::list& this_nodes); // Перестройка узлов анимации void rebuld_bones(const Scene &from); // Перестройка указателей на кости и узлы, которые выступают в роли костей }; #endif // SCENE_H