From 322651daccae88f838e079cbde362fe84cdc0b0c Mon Sep 17 00:00:00 2001
From: Alexander Gauggel <agauggel@uni-koblenz.de>
Date: Wed, 16 Jun 2021 12:27:59 +0200
Subject: [PATCH] [#63] Fix scene mesh translation

---
 modules/asset_loader/src/vkcv/asset/asset_loader.cpp |  6 +++---
 projects/first_scene/src/main.cpp                    | 11 +++++++----
 2 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/modules/asset_loader/src/vkcv/asset/asset_loader.cpp b/modules/asset_loader/src/vkcv/asset/asset_loader.cpp
index 1fdb6932..87b2860a 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 7cabe46a..c867cdf1 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()) {
-- 
GitLab