| 32 | } |
| 33 | |
| 34 | KeyframeInterpolationData AnimData::GetKeyframeInterpolationData(int frameNumber) const |
| 35 | { |
| 36 | // FAILSAFE: Clamp frame number. |
| 37 | frameNumber = std::clamp(frameNumber, 0, EndFrameNumber); |
| 38 | |
| 39 | // Calculate keyframes defining interpolated frame. |
| 40 | float keyframeNumber = frameNumber / (float)Interpolation; |
| 41 | const auto& keyframe0 = Keyframes[(int)floor(keyframeNumber)]; |
| 42 | const auto& keyframe1 = Keyframes[(int)ceil(keyframeNumber)]; |
| 43 | |
| 44 | // Calculate interpolation alpha between keyframes. |
| 45 | float alpha = (1.0f / Interpolation) * (frameNumber % Interpolation); |
| 46 | |
| 47 | // Return keyframe interpolation data. |
| 48 | return KeyframeInterpolationData(keyframe0, keyframe1, alpha); |
| 49 | } |
| 50 | |
| 51 | const KeyframeData& AnimData::GetClosestKeyframe(int frameNumber) const |
| 52 | { |
no test coverage detected