From cb4e663138b4a806514106099ced678be8b09eb9 Mon Sep 17 00:00:00 2001 From: Steve M Date: Sat, 12 Oct 2024 03:49:10 -0700 Subject: [PATCH] Restore 4x4 matrix functionn param and assignment prior to change in commit 168ae22 of 27 Oct 2019 (#5813) Co-authored-by: Steve M --- code/AssetLib/FBX/FBXConverter.cpp | 10 +++++----- code/AssetLib/FBX/FBXConverter.h | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/code/AssetLib/FBX/FBXConverter.cpp b/code/AssetLib/FBX/FBXConverter.cpp index 8c7cbf74b..f658d8e76 100644 --- a/code/AssetLib/FBX/FBXConverter.cpp +++ b/code/AssetLib/FBX/FBXConverter.cpp @@ -247,7 +247,7 @@ struct FBXConverter::PotentialNode { /// todo: get bone from stack /// todo: make map of aiBone* to aiNode* /// then update convert clusters to the new format -void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node) { +void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node, const aiMatrix4x4& parent_transform) { const std::vector &conns = doc.GetConnectionsByDestinationSequenced(id, "Model"); std::vector nodes; @@ -278,7 +278,7 @@ void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node) if (nullptr != model) { nodes_chain.clear(); post_nodes_chain.clear(); - aiMatrix4x4 new_abs_transform = parent->mTransformation; + aiMatrix4x4 new_abs_transform = parent_transform; std::string node_name = FixNodeName(model->Name()); // even though there is only a single input node, the design of // assimp (or rather: the complicated transformation chain that @@ -345,7 +345,7 @@ void FBXConverter::ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node) } // recursion call - child nodes - ConvertNodes(model->ID(), last_parent, root_node); + ConvertNodes(model->ID(), last_parent, root_node, new_abs_transform); if (doc.Settings().readLights) { ConvertLights(*model, node_name); @@ -1676,14 +1676,14 @@ void FBXConverter::ConvertCluster(std::vector &local_mesh_bones, const //bone->mOffsetMatrix = cluster->Transform(); // store local transform link for post processing - + bone->mOffsetMatrix = cluster->TransformLink(); bone->mOffsetMatrix.Inverse(); const aiMatrix4x4 matrix = (aiMatrix4x4)absolute_transform; bone->mOffsetMatrix = bone->mOffsetMatrix * matrix; // * mesh_offset - + // // Now calculate the aiVertexWeights // diff --git a/code/AssetLib/FBX/FBXConverter.h b/code/AssetLib/FBX/FBXConverter.h index 73dc9e5a7..096c2619f 100644 --- a/code/AssetLib/FBX/FBXConverter.h +++ b/code/AssetLib/FBX/FBXConverter.h @@ -134,7 +134,7 @@ private: // ------------------------------------------------------------------------------------------------ // collect and assign child nodes - void ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node); + void ConvertNodes(uint64_t id, aiNode *parent, aiNode *root_node, const aiMatrix4x4& parent_transform = aiMatrix4x4()); // ------------------------------------------------------------------------------------------------ void ConvertLights(const Model& model, const std::string &orig_name );