WIP: write node tree structure into file

This commit is contained in:
Xiao Qi 2023-02-28 17:11:58 +08:00
parent 94af967fb1
commit fc072a8967
3 changed files with 57 additions and 6 deletions

View File

@ -297,8 +297,8 @@ namespace SH_COMP
static_cast<std::vector<IndexType> const&>(intermediate), static_cast<std::vector<IndexType> const&>(intermediate),
node.rotation, node.rotation,
node.translation, node.translation,
node.matrix, node.matrix
node.weights //node.weights
); );
} }
for (auto const& skin : data.skins) for (auto const& skin : data.skins)

View File

@ -145,7 +145,53 @@ namespace SH_COMP
void MeshWriter::WriteRigNodeData(FileReference file, RigData const& rig) void MeshWriter::WriteRigNodeData(FileReference file, RigData const& rig)
{ {
//TODO reimplement rig node data write std::vector<IndexType> treeNodeWrite;
for (auto const& node : rig.nodes)
{
file.write(
node.name.data(),
node.name.size()
);
file.write(
reinterpret_cast<char const*>(&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<char const*>(node.rotation.data()),
sizeof(double) * NODE_COMPONENT_COUNT_ROTATION
);
file.write(
reinterpret_cast<char const*>(node.scale.data()),
sizeof(double) * NODE_COMPONENT_COUNT_SCALE
);
file.write(
reinterpret_cast<char const*>(node.translation.data()),
sizeof(double) * NODE_COMPONENT_COUNT_TRANSLATION
);
file.write(
reinterpret_cast<char const*>(node.matrix.data()),
sizeof(double) * NODE_COMPONENT_COUNT_MATRIX
);
}
} }
void MeshWriter::WriteHeaders(FileReference file, ModelConstRef asset) void MeshWriter::WriteHeaders(FileReference file, ModelConstRef asset)

View File

@ -14,7 +14,12 @@ namespace SH_COMP
constexpr NodeDataFlag NODE_DATA_SCALE = 0b00010; constexpr NodeDataFlag NODE_DATA_SCALE = 0b00010;
constexpr NodeDataFlag NODE_DATA_TRANSLATION = 0b00100; constexpr NodeDataFlag NODE_DATA_TRANSLATION = 0b00100;
constexpr NodeDataFlag NODE_DATA_MATRIX = 0b01000; 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 struct RigDataHeader
{ {
@ -32,8 +37,8 @@ namespace SH_COMP
rotation, rotation,
scale, scale,
translation, translation,
matrix, matrix;
weights; //weights;
SHMat4 inverseBindMatrix; SHMat4 inverseBindMatrix;
}; };