diff --git a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp index 1fdb693226a4308f93b6458bf6a5d85a1de1edff..87b2860a734c7abfad6a8d43c8369fe476b6a557 100644 --- a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp +++ b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp @@ -330,13 +330,13 @@ int loadScene(const std::string &path, Scene &scene){ std::vector<Sampler> samplers; std::vector<Mesh> meshes; std::vector<VertexGroup> vertexGroups; - std::vector<int> vertexGroupsIndex; int groupCount = 0; Mesh mesh = {}; for(int i = 0; i < sceneObjects.meshes.size(); i++){ + std::vector<int> vertexGroupsIndices; fx::gltf::Mesh const &objectMesh = sceneObjects.meshes[i]; for(int j = 0; j < objectMesh.primitives.size(); j++){ @@ -440,12 +440,12 @@ int loadScene(const std::string &path, Scene &scene){ static_cast<uint8_t>(objectPrimitive.material) }); + vertexGroupsIndices.push_back(groupCount); groupCount++; - vertexGroupsIndex.push_back(groupCount); } mesh.name = sceneObjects.meshes[i].name; - mesh.vertexGroups = vertexGroupsIndex; + mesh.vertexGroups = vertexGroupsIndices; meshes.push_back(mesh); } diff --git a/projects/first_scene/src/main.cpp b/projects/first_scene/src/main.cpp index 7cabe46a22dc155d0489dead37e30e07b7db8d94..c867cdf1071cf470601001a77ff090bdf709876c 100644 --- a/projects/first_scene/src/main.cpp +++ b/projects/first_scene/src/main.cpp @@ -180,11 +180,14 @@ int main(int argc, const char** argv) { } std::vector<glm::mat4> modelMatrices; - modelMatrices.clear(); - for(int m = 0; m < scene.meshes.size(); m++){ - modelMatrices.push_back(arrayTo4x4Matrix(scene.meshes[m].modelMatrix)); + modelMatrices.resize(scene.vertexGroups.size(), glm::mat4(1.f)); + for (const auto &mesh : scene.meshes) { + const glm::mat4 m = arrayTo4x4Matrix(mesh.modelMatrix); + for (const auto &vertexGroupIndex : mesh.vertexGroups) { + modelMatrices[vertexGroupIndex] = m; + } } - std::vector<glm::mat4> mvp; + std::vector<glm::mat4> mvp; auto start = std::chrono::system_clock::now(); while (window.isWindowOpen()) {