diff --git a/include/Model.h b/include/Model.h index 8fc37a8..fd976a8 100644 --- a/include/Model.h +++ b/include/Model.h @@ -9,7 +9,7 @@ #include #define DEFAULT_MTL_DIR "./" -void loadOBJtoVector(const char* filename, std::vector& scene, const char* mtl_directory = DEFAULT_MTL_DIR, const char* texture_directory = DEFAULT_MTL_DIR); +class GrouptedModel loadOBJtoGroupted(const char* filename, const char* mtl_directory = DEFAULT_MTL_DIR, const char* texture_directory = DEFAULT_MTL_DIR); // Класс определяющий положение, вращение и размер объекта class Movable diff --git a/src/Model.cpp b/src/Model.cpp index 37f6f4c..d94fb98 100644 --- a/src/Model.cpp +++ b/src/Model.cpp @@ -197,8 +197,9 @@ inline void hash_combine(std::size_t& seed, const T& v, Rest... rest) { hash_combine(seed, rest...); } -void loadOBJtoVector(const char* filename, std::vector& scene, const char* mtl_directory, const char* texture_directory) +GrouptedModel loadOBJtoGroupted(const char* filename, const char* mtl_directory, const char* texture_directory) { + GrouptedModel result; Model model; tinyobj::attrib_t attrib; @@ -293,13 +294,15 @@ void loadOBJtoVector(const char* filename, std::vector& scene, const char // И присваиваем текстуры копиям на основании материала for (int i = 0; i < materials_range.size()-1; i++) { - scene.push_back(model); // Создание копии с общим VAO - auto s = --scene.end(); + result.parts.push_back(model); // Создание копии с общим VAO + auto s = --result.parts.end(); s->set_index_range(materials_range[i], materials_range[i+1]-materials_range[i]); Texture diffuse(TEX_DIFFUSE, texture_directory + materials[materials_ids[i]].diffuse_texname); s->set_texture(diffuse); } + + return result; } // Вызов отрисовки групповой модели diff --git a/src/main.cpp b/src/main.cpp index 8021d3a..377d5d3 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -190,8 +190,7 @@ int main(void) // camera.move({0,0,-20}); // Загрузка сцены из obj файла - std::vector scene; - loadOBJtoVector("../resources/models/cubes.obj", scene, "../resources/models/", "../resources/textures/"); + GrouptedModel scene = loadOBJtoGroupted("../resources/models/cubes.obj", "../resources/models/", "../resources/textures/"); // Установка цвета очистки буфера цвета glClearColor(0.0f, 0.0f, 0.0f, 1.0f); @@ -208,10 +207,7 @@ int main(void) glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Тут производится рендер - for (auto& model : scene) - { - model.render(mvp_uniform); - } + scene.render(mvp_uniform); // Представление содержимого буфера цепочки показа на окно glfwSwapBuffers(window);