mirror of
https://github.com/Laupetin/OpenAssetTools.git
synced 2025-04-19 15:52:53 +00:00
Merge pull request #254 from Laupetin/fix/models-without-bones
fix: auto generate armature when imported gltf has none
This commit is contained in:
commit
abae48ead2
@ -262,6 +262,33 @@ namespace
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void AutoGenerateArmature(XModelCommon& common)
|
||||||
|
{
|
||||||
|
assert(common.m_bones.empty());
|
||||||
|
assert(common.m_bone_weight_data.weights.empty());
|
||||||
|
assert(common.m_vertex_bone_weights.size() == common.m_vertices.size());
|
||||||
|
|
||||||
|
XModelBone rootBone{
|
||||||
|
"root",
|
||||||
|
std::nullopt,
|
||||||
|
{1.0f, 1.0f, 1.0f},
|
||||||
|
{0.0f, 0.0f, 0.0f},
|
||||||
|
{0.0f, 0.0f, 0.0f},
|
||||||
|
{0.0f, 0.0f, 0.0f, 1.0f},
|
||||||
|
{0.0f, 0.0f, 0.0f, 1.0f},
|
||||||
|
};
|
||||||
|
common.m_bones.emplace_back(rootBone);
|
||||||
|
|
||||||
|
XModelBoneWeight rootWeight{0, 1.0f};
|
||||||
|
common.m_bone_weight_data.weights.emplace_back(rootWeight);
|
||||||
|
|
||||||
|
for (auto& vertexBoneWeights : common.m_vertex_bone_weights)
|
||||||
|
{
|
||||||
|
vertexBoneWeights.weightOffset = 0u;
|
||||||
|
vertexBoneWeights.weightCount = 1u;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static void ApplyBasePose(DObjAnimMat& baseMat, const XModelBone& bone)
|
static void ApplyBasePose(DObjAnimMat& baseMat, const XModelBone& bone)
|
||||||
{
|
{
|
||||||
baseMat.trans.x = bone.globalOffset[0];
|
baseMat.trans.x = bone.globalOffset[0];
|
||||||
@ -713,6 +740,9 @@ namespace
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (common->m_bones.empty())
|
||||||
|
AutoGenerateArmature(*common);
|
||||||
|
|
||||||
if (lodNumber == 0u)
|
if (lodNumber == 0u)
|
||||||
{
|
{
|
||||||
if (!ApplyCommonBonesToXModel(jLod, xmodel, lodNumber, *common))
|
if (!ApplyCommonBonesToXModel(jLod, xmodel, lodNumber, *common))
|
||||||
|
Loading…
x
Reference in New Issue
Block a user