From d590a3894f2f6453ca76bbdeeeb4d286b22f40ff Mon Sep 17 00:00:00 2001 From: Xiao Qi Date: Tue, 17 Jan 2023 15:40:35 +0800 Subject: [PATCH] Fixed bug when processing nodes in scene Rewrote bone writing because i discarded like a moron --- src/Libraries/MeshCompiler.cpp | 17 ++++++++--------- src/Libraries/MeshWriter.cpp | 26 ++++++++++++++++++++++++++ src/Types/MeshAsset.h | 2 +- 3 files changed, 35 insertions(+), 10 deletions(-) diff --git a/src/Libraries/MeshCompiler.cpp b/src/Libraries/MeshCompiler.cpp index 583a835..94d8a21 100644 --- a/src/Libraries/MeshCompiler.cpp +++ b/src/Libraries/MeshCompiler.cpp @@ -42,21 +42,20 @@ namespace SH_COMP { if (node->mNumMeshes > 0) { - aiMesh* mesh = scene.mMeshes[node->mMeshes[0]]; - meshes.emplace_back(); - GetMesh(*mesh, meshes.back()); - meshes.back().name = node->mName.C_Str(); + aiMesh* mesh = scene.mMeshes[node->mMeshes[0]]; + meshes.emplace_back(); + GetMesh(*mesh, meshes.back()); + meshes.back().name = node->mName.C_Str(); } else if (node->mParent != nullptr) { BuildArmature(node, rig); + return; } - else + + for (auto i{ 0 }; i < node->mNumChildren; ++i) { - for (auto i{ 0 }; i < node->mNumChildren; ++i) - { - ProcessNode(node->mChildren[i], scene, meshes, rig); - } + ProcessNode(node->mChildren[i], scene, meshes, rig); } } diff --git a/src/Libraries/MeshWriter.cpp b/src/Libraries/MeshWriter.cpp index 11282cc..ed5b489 100644 --- a/src/Libraries/MeshWriter.cpp +++ b/src/Libraries/MeshWriter.cpp @@ -55,6 +55,32 @@ namespace SH_COMP reinterpret_cast(asset.indices.data()), sizeof(uint32_t) * header.indexCount ); + + if (header.boneCount) + { + file.write( + reinterpret_cast(asset.bonesInfo.data()), + sizeof(MeshBoneInfo) * header.boneCount + ); + + for (auto const& bone : asset.bones) + { + file.write( + bone.name.data(), + bone.name.size() + ); + + file.write( + reinterpret_cast(&bone.offset), + sizeof(SHMat4) + ); + + file.write( + reinterpret_cast(bone.weights.data()), + sizeof(BoneWeight) * bone.weights.size() + ); + } + } } } diff --git a/src/Types/MeshAsset.h b/src/Types/MeshAsset.h index fbd4a6c..4020720 100644 --- a/src/Types/MeshAsset.h +++ b/src/Types/MeshAsset.h @@ -18,7 +18,7 @@ namespace SH_COMP struct MeshBoneInfo { uint32_t charCount; - uint32_t weightCount; // Size should be same as boneCount + uint32_t weightCount; }; struct BoneWeight