From f751c36aba2d160e41eb68b919de7929df48e907 Mon Sep 17 00:00:00 2001 From: "R.E. Kovalev" Date: Fri, 31 Mar 2023 13:32:35 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D0=B7=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?UTF-8?q?=D0=B8=D0=B5=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B7=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B8=20=D0=B8=D0=B7?= =?UTF-8?q?=20=D1=84=D0=B0=D0=B9=D0=BB=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/Model.h | 2 +- src/Model.cpp | 9 ++++++--- src/main.cpp | 8 ++------ 3 files changed, 9 insertions(+), 10 deletions(-) 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);