Изменение функции загрузки из файла

This commit is contained in:
parent 1770c6518b
commit f751c36aba
3 changed files with 9 additions and 10 deletions

View File

@ -9,7 +9,7 @@
#include <vector> #include <vector>
#define DEFAULT_MTL_DIR "./" #define DEFAULT_MTL_DIR "./"
void loadOBJtoVector(const char* filename, std::vector<class Model>& 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 class Movable

View File

@ -197,8 +197,9 @@ inline void hash_combine(std::size_t& seed, const T& v, Rest... rest) {
hash_combine(seed, rest...); hash_combine(seed, rest...);
} }
void loadOBJtoVector(const char* filename, std::vector<Model>& 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; Model model;
tinyobj::attrib_t attrib; tinyobj::attrib_t attrib;
@ -293,13 +294,15 @@ void loadOBJtoVector(const char* filename, std::vector<Model>& scene, const char
// И присваиваем текстуры копиям на основании материала // И присваиваем текстуры копиям на основании материала
for (int i = 0; i < materials_range.size()-1; i++) for (int i = 0; i < materials_range.size()-1; i++)
{ {
scene.push_back(model); // Создание копии с общим VAO result.parts.push_back(model); // Создание копии с общим VAO
auto s = --scene.end(); auto s = --result.parts.end();
s->set_index_range(materials_range[i], materials_range[i+1]-materials_range[i]); 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); Texture diffuse(TEX_DIFFUSE, texture_directory + materials[materials_ids[i]].diffuse_texname);
s->set_texture(diffuse); s->set_texture(diffuse);
} }
return result;
} }
// Вызов отрисовки групповой модели // Вызов отрисовки групповой модели

View File

@ -190,8 +190,7 @@ int main(void)
// camera.move({0,0,-20}); // camera.move({0,0,-20});
// Загрузка сцены из obj файла // Загрузка сцены из obj файла
std::vector<Model> scene; GrouptedModel scene = loadOBJtoGroupted("../resources/models/cubes.obj", "../resources/models/", "../resources/textures/");
loadOBJtoVector("../resources/models/cubes.obj", scene, "../resources/models/", "../resources/textures/");
// Установка цвета очистки буфера цвета // Установка цвета очистки буфера цвета
glClearColor(0.0f, 0.0f, 0.0f, 1.0f); 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); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// Тут производится рендер // Тут производится рендер
for (auto& model : scene) scene.render(mvp_uniform);
{
model.render(mvp_uniform);
}
// Представление содержимого буфера цепочки показа на окно // Представление содержимого буфера цепочки показа на окно
glfwSwapBuffers(window); glfwSwapBuffers(window);