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),
node.rotation,
node.translation,
node.matrix,
node.weights
node.matrix
//node.weights
);
}
for (auto const& skin : data.skins)

View File

@ -145,7 +145,53 @@ namespace SH_COMP
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)

View File

@ -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;
};