2024-01-02 17:06:44 +00:00
# ifndef SCENE_H
# define SCENE_H
# include <list>
# include "Model.h"
# include "Camera.h"
2024-01-02 17:12:32 +00:00
# include "Animation.h"
2024-01-02 17:06:44 +00:00
# include <GLM/gtc/type_ptr.hpp>
# include <GLM/gtc/quaternion.hpp>
# include <GLM/gtx/quaternion.hpp>
# include <GLM/gtx/euler_angles.hpp>
# 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 & copy ) ; // Конструктор копирования
Scene & operator = ( const Scene & other ) ; // Оператор присваивания
void render ( ShaderProgram & shaderProgram , UBO & material_buffer ) ; // Рендер сцены
void set_group_id ( GLuint64 id , GLuint etc = 0 ) ; // Изменение флага записи идентификатора для всех моделей
Node root ; // Корневой узел
// Списки объектов, выступающих узлами
std : : list < Node > nodes ; // Список пустых узлов
std : : list < Model > models ; // Список моделей для рендера
std : : list < Camera > cameras ; // Список камер
2024-01-02 17:12:32 +00:00
std : : vector < Animation > animations ; // Список анимаций
std : : map < std : : string , size_t > animation_names ; // Имя анимации - индекс
2024-01-02 17:06:44 +00:00
protected :
void rebuld_tree ( const Scene & from ) ; // Перестройка дерева после копирования или присваивания
template < class T >
void rebuild_Nodes_list ( T & nodes , const Scene & from ) ; // Перестройка узлов выбранного списка
template < class T >
void move_parent ( Node & for_node , const std : : list < T > & from_nodes , std : : list < T > & this_nodes ) ; // Сдвигает родителя узла между двумя списками при условии е г о принадлежности к оригинальному
} ;
# endif // SCENE_H