From e7c1dc20ba07b6efeb3493b6a1f79220fdd95a7b Mon Sep 17 00:00:00 2001 From: sippeangelo Date: Wed, 21 Oct 2015 15:37:49 +0200 Subject: [PATCH] HACK: For some reason Blender likes to create a first frame that doesn't start at time 0 --- src/game/Rendering/RawModel.cpp | 4 ++++ src/game/Rendering/Skeleton.cpp | 2 +- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/src/game/Rendering/RawModel.cpp b/src/game/Rendering/RawModel.cpp index 46fb5df..35d7da6 100644 --- a/src/game/Rendering/RawModel.cpp +++ b/src/game/Rendering/RawModel.cpp @@ -293,6 +293,10 @@ dd::RawModel::RawModel(std::string fileName) Skeleton::Animation::Keyframe animationFrame; animationFrame.Index = keyframe; animationFrame.Time = frameTimes[keyframe] / animation->mTicksPerSecond; + // HACK: For some reason Blender likes to create a first frame that doesn't start at time 0 + if (keyframe == 0) { + animationFrame.Time = 0; + } for (auto &kv2 : kv.second) { int boneID = kv2.first; auto &property = kv2.second; diff --git a/src/game/Rendering/Skeleton.cpp b/src/game/Rendering/Skeleton.cpp index 69e9651..d68d59a 100644 --- a/src/game/Rendering/Skeleton.cpp +++ b/src/game/Rendering/Skeleton.cpp @@ -154,7 +154,7 @@ int dd::Skeleton::GetKeyframe(const Animation& animation, double time) for (int keyframe = 0; keyframe < animation.Keyframes.size(); ++keyframe) { if (animation.Keyframes[keyframe].Time > time) - return glm::max(0, keyframe - 1); // HACK: If the time is less than the first keyframe, don + return (keyframe - 1) % animation.Keyframes.size(); } return 0;