diff --git a/code/glTF2Importer.cpp b/code/glTF2Importer.cpp index e8d2a2d95..ff9fd4269 100755 --- a/code/glTF2Importer.cpp +++ b/code/glTF2Importer.cpp @@ -1022,6 +1022,26 @@ void glTF2Importer::ImportAnimations(glTF2::Asset& r) ++j; } } + + // Use the latest keyframe for the duration of the animation + unsigned int maxDuration = 0; + for (unsigned int j = 0; j < ai_anim->mNumChannels; ++j) { + auto chan = ai_anim->mChannels[j]; + if (chan->mNumPositionKeys) { + auto lastPosKey = chan->mPositionKeys[chan->mNumPositionKeys - 1]; + if (lastPosKey.mTime > maxDuration) maxDuration = lastPosKey.mTime; + } + if (chan->mNumRotationKeys) { + auto lastRotKey = chan->mRotationKeys[chan->mNumRotationKeys - 1]; + if (lastRotKey.mTime > maxDuration) maxDuration = lastRotKey.mTime; + } + if (chan->mNumScalingKeys) { + auto lastScaleKey = chan->mScalingKeys[chan->mNumScalingKeys - 1]; + if (lastScaleKey.mTime > maxDuration) maxDuration = lastScaleKey.mTime; + } + } + ai_anim->mDuration = maxDuration; + mScene->mAnimations[i] = ai_anim; } }