BFS Copy WIP
This commit is contained in:
parent
d03c12d1e2
commit
e6f6f9b0c5
|
@ -17,11 +17,24 @@
|
|||
#include <fstream>
|
||||
#include <iostream>
|
||||
|
||||
#include <stack>
|
||||
#include <queue>
|
||||
|
||||
namespace SH_COMP
|
||||
{
|
||||
|
||||
SHMat4 aiTransformToMat4(aiMatrix4x4 const& inMatrx)
|
||||
{
|
||||
SHMat4 result;
|
||||
|
||||
std::memcpy(
|
||||
reinterpret_cast<char*>(&result),
|
||||
reinterpret_cast<char const*>(&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<AnimData>& 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<std::pair<RigNode*, aiNode const*>> nodesQueue;
|
||||
rig.root = new RigNode();
|
||||
rig.root->idRef = RegisterNewNode(**baseNode.mChildren, rig);
|
||||
nodesQueue.push({rig.root, *baseNode.mChildren});
|
||||
std::queue<std::pair<RigNodeData*, aiNode const&>> nodeQueue;
|
||||
auto& collection = rig.nodeDataCollection;
|
||||
collection.clear();
|
||||
|
||||
while(!nodesQueue.empty())
|
||||
{
|
||||
auto& rigNode { *nodesQueue.top().first };
|
||||
auto const& dataNode { *nodesQueue.top().second };
|
||||
nodesQueue.pop();
|
||||
//TODO FINISH BFS COPY
|
||||
|
||||
for (auto i{ 0 }; i < dataNode.mNumChildren; ++i)
|
||||
while(!nodeQueue.empty())
|
||||
{
|
||||
rigNode.children.push_back(new RigNode());
|
||||
rigNode.children[i]->idRef = RegisterNewNode(*dataNode.mChildren[i], rig);
|
||||
nodesQueue.push({
|
||||
rigNode.children[i],
|
||||
dataNode.mChildren[i]
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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<AnimData>& anims) noexcept;
|
||||
|
||||
static void LoadFromFile(AssetPath path, ModelRef asset) noexcept;
|
||||
|
|
|
@ -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<uint32_t, RigNodeData> nodeDataCollection;
|
||||
RigNode* root;
|
||||
};
|
||||
|
|
Loading…
Reference in New Issue