diff --git a/src/Libraries/MeshCompiler.hpp b/src/Libraries/MeshCompiler.hpp index 5cf4427..bacefd2 100644 --- a/src/Libraries/MeshCompiler.hpp +++ b/src/Libraries/MeshCompiler.hpp @@ -297,8 +297,8 @@ namespace SH_COMP static_cast const&>(intermediate), node.rotation, node.translation, - node.matrix, - node.weights + node.matrix + //node.weights ); } for (auto const& skin : data.skins) diff --git a/src/Libraries/MeshWriter.cpp b/src/Libraries/MeshWriter.cpp index e34840e..cb5f40c 100644 --- a/src/Libraries/MeshWriter.cpp +++ b/src/Libraries/MeshWriter.cpp @@ -145,7 +145,53 @@ namespace SH_COMP void MeshWriter::WriteRigNodeData(FileReference file, RigData const& rig) { - //TODO reimplement rig node data write + std::vector treeNodeWrite; + for (auto const& node : rig.nodes) + { + file.write( + node.name.data(), + node.name.size() + ); + + file.write( + reinterpret_cast(&node.inverseBindMatrix), + sizeof(SHMat4) + ); + + //Build data flags + NodeDataFlag flag{ 0 }; + + if (!node.rotation.empty()) + flag &= NODE_DATA_ROTATION; + if (!node.scale.empty()) + flag &= NODE_DATA_SCALE; + if (!node.translation.empty()) + flag &= NODE_DATA_TRANSLATION; + if (!node.matrix.empty()) + flag &= NODE_DATA_MATRIX; + + file.put(flag); + + file.write( + reinterpret_cast(node.rotation.data()), + sizeof(double) * NODE_COMPONENT_COUNT_ROTATION + ); + + file.write( + reinterpret_cast(node.scale.data()), + sizeof(double) * NODE_COMPONENT_COUNT_SCALE + ); + + file.write( + reinterpret_cast(node.translation.data()), + sizeof(double) * NODE_COMPONENT_COUNT_TRANSLATION + ); + + file.write( + reinterpret_cast(node.matrix.data()), + sizeof(double) * NODE_COMPONENT_COUNT_MATRIX + ); + } } void MeshWriter::WriteHeaders(FileReference file, ModelConstRef asset) diff --git a/src/Types/RigAsset.h b/src/Types/RigAsset.h index 3dd7d75..7ec5102 100644 --- a/src/Types/RigAsset.h +++ b/src/Types/RigAsset.h @@ -14,7 +14,12 @@ namespace SH_COMP constexpr NodeDataFlag NODE_DATA_SCALE = 0b00010; constexpr NodeDataFlag NODE_DATA_TRANSLATION = 0b00100; constexpr NodeDataFlag NODE_DATA_MATRIX = 0b01000; - constexpr NodeDataFlag NODE_DATA_WEIGHTS = 0b10000; + //constexpr NodeDataFlag NODE_DATA_WEIGHTS = 0b10000; + + constexpr size_t NODE_COMPONENT_COUNT_ROTATION{ 4 }; + constexpr size_t NODE_COMPONENT_COUNT_SCALE{ 3 }; + constexpr size_t NODE_COMPONENT_COUNT_TRANSLATION{ 3 }; + constexpr size_t NODE_COMPONENT_COUNT_MATRIX{ 16 }; struct RigDataHeader { @@ -32,8 +37,8 @@ namespace SH_COMP rotation, scale, translation, - matrix, - weights; + matrix; + //weights; SHMat4 inverseBindMatrix; };