From e6f6f9b0c5427fc50bbeb04ee62de244894ae3f5 Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Wed, 4 Jan 2023 18:08:08 +0800 Subject: [PATCH] BFS Copy WIP --- src/Libraries/MeshCompiler.cpp | 54 +++++++++++++--------------------- src/Libraries/MeshCompiler.h | 1 - src/Types/RigAsset.h | 4 +++ 3 files changed, 25 insertions(+), 34 deletions(-) diff --git a/src/Libraries/MeshCompiler.cpp b/src/Libraries/MeshCompiler.cpp index b09ec02..103f0aa 100644 --- a/src/Libraries/MeshCompiler.cpp +++ b/src/Libraries/MeshCompiler.cpp @@ -17,11 +17,24 @@ #include #include -#include +#include namespace SH_COMP { + SHMat4 aiTransformToMat4(aiMatrix4x4 const& inMatrx) + { + SHMat4 result; + + std::memcpy( + reinterpret_cast(&result), + reinterpret_cast(&inMatrx), + sizeof(result) + ); + + return result; + } + Assimp::Importer MeshCompiler::aiImporter; uint32_t MeshCompiler::rigNodeIDCounter { 0 }; @@ -165,20 +178,6 @@ namespace SH_COMP } } - uint32_t MeshCompiler::RegisterNewNode(aiNode const& node, RigData& rig) noexcept - { - auto const result = rigNodeIDCounter++; - - rig.nodeDataCollection[result].name = node.mName.C_Str(); - std::memcpy( - &rig.nodeDataCollection[result].transform, - &node.mTransformation, - sizeof(SHMat4) - ); - - return result; - } - void MeshCompiler::ParseAnimations(aiScene const& scene, std::vector& anims) noexcept { // Size and read for number of animation clips @@ -275,26 +274,15 @@ namespace SH_COMP void MeshCompiler::BuildArmature(aiNode const& baseNode, RigData& rig) noexcept { - std::stack> nodesQueue; - rig.root = new RigNode(); - rig.root->idRef = RegisterNewNode(**baseNode.mChildren, rig); - nodesQueue.push({rig.root, *baseNode.mChildren}); + std::queue> nodeQueue; + auto& collection = rig.nodeDataCollection; + collection.clear(); - while(!nodesQueue.empty()) + //TODO FINISH BFS COPY + + while(!nodeQueue.empty()) { - auto& rigNode { *nodesQueue.top().first }; - auto const& dataNode { *nodesQueue.top().second }; - nodesQueue.pop(); - - for (auto i{ 0 }; i < dataNode.mNumChildren; ++i) - { - rigNode.children.push_back(new RigNode()); - rigNode.children[i]->idRef = RegisterNewNode(*dataNode.mChildren[i], rig); - nodesQueue.push({ - rigNode.children[i], - dataNode.mChildren[i] - }); - } + } } diff --git a/src/Libraries/MeshCompiler.h b/src/Libraries/MeshCompiler.h index d1bd365..099da74 100644 --- a/src/Libraries/MeshCompiler.h +++ b/src/Libraries/MeshCompiler.h @@ -38,7 +38,6 @@ namespace SH_COMP static void BuildHeaders(ModelRef asset) noexcept; static void BuildArmature(aiNode const& node, RigData& rig) noexcept; - static uint32_t RegisterNewNode(aiNode const& node, RigData& rig) noexcept; static void ParseAnimations(aiScene const& scene, std::vector& anims) noexcept; static void LoadFromFile(AssetPath path, ModelRef asset) noexcept; diff --git a/src/Types/RigAsset.h b/src/Types/RigAsset.h index 31bba75..0177892 100644 --- a/src/Types/RigAsset.h +++ b/src/Types/RigAsset.h @@ -16,6 +16,9 @@ namespace SH_COMP struct RigNodeData { + RigNodeData(const char* cstr, SHMat4 mat) + :name {cstr}, transform{mat} {} + std::string name; SHMat4 transform; }; @@ -28,6 +31,7 @@ namespace SH_COMP struct RigData { + RigDataHeader header; std::map nodeDataCollection; RigNode* root; };