From 7e948de2db4c65e08c20aa03a96bbfaf138ace52 Mon Sep 17 00:00:00 2001 From: Menotdan <32620310+Menotdan@users.noreply.github.com> Date: Thu, 4 Jan 2024 15:29:23 -0500 Subject: [PATCH] Handle multiple nodes having the same mesh (probably?) --- .../Tools/ModelTool/ModelTool.Assimp.cpp | 42 +++++++++---------- 1 file changed, 20 insertions(+), 22 deletions(-) diff --git a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp index 8ce3cc0d0..85e320ee6 100644 --- a/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp +++ b/Source/Engine/Tools/ModelTool/ModelTool.Assimp.cpp @@ -483,27 +483,6 @@ bool ProcessMesh(ModelData& result, AssimpImporterData& data, const aiMesh* aMes } } } - - AssimpNode* curNode = &data.Nodes[mesh.NodeIndex]; - Vector3 translation = Vector3::Zero; - Vector3 scale = Vector3::One; - Quaternion rotation = Quaternion::Identity; - - while(true) - { - translation += curNode->LocalTransform.Translation; - scale *= curNode->LocalTransform.Scale; - rotation *= curNode->LocalTransform.Orientation; - - if (curNode->ParentIndex == -1) - break; - curNode = &data.Nodes[curNode->ParentIndex]; - } - - mesh.OriginTranslation = translation; - mesh.OriginOrientation = rotation; - mesh.Scaling = scale; - return false; } @@ -644,7 +623,6 @@ bool ImportMesh(int32 index, ModelData& result, AssimpImporterData& data, String // Import mesh data MeshData* meshData = New(); - meshData->NodeIndex = data.MeshIndexToNodeIndex[index][0]; if (ProcessMesh(result, data, aMesh, *meshData, errorMsg)) { Delete(meshData); @@ -666,6 +644,26 @@ bool ImportMesh(int32 index, ModelData& result, AssimpImporterData& data, String // Link mesh meshData->NodeIndex = nodeIndex; + AssimpNode* curNode = &data.Nodes[meshData->NodeIndex]; + Vector3 translation = Vector3::Zero; + Vector3 scale = Vector3::One; + Quaternion rotation = Quaternion::Identity; + + while (true) + { + translation += curNode->LocalTransform.Translation; + scale *= curNode->LocalTransform.Scale; + rotation *= curNode->LocalTransform.Orientation; + + if (curNode->ParentIndex == -1) + break; + curNode = &data.Nodes[curNode->ParentIndex]; + } + + meshData->OriginTranslation = translation; + meshData->OriginOrientation = rotation; + meshData->Scaling = scale; + if (result.LODs.Count() <= lodIndex) result.LODs.Resize(lodIndex + 1); result.LODs[lodIndex].Meshes.Add(meshData);