#include "animation.h" #include "log.h" #include "maths.h" keyframe animation_sample(animation_sampler *sampler, f32 t) { size_t previous_index = 0; f32 previous_time = 0.0; // look forwards // DEBUG("%d\n", sampler->animation.values.kind); TRACE("Total timestamps %d", sampler->animation.n_timestamps); for (u32 i = 0; i < sampler->animation.n_timestamps; i++) { f32 current_time = sampler->animation.timestamps[i]; if (current_time > t) { break; } previous_time = sampler->animation.timestamps[i]; previous_index = i; } size_t next_index = (previous_index + 1) % sampler->animation.n_timestamps; f32 next_time = sampler->animation.timestamps[next_index]; printf("%d %f %d %f\n", previous_index, previous_time, next_index, next_time); keyframe prev_value = sampler->animation.values.values[previous_index]; keyframe next_value = sampler->animation.values.values[next_index]; printf("%d %d\n", previous_index, next_index); f32 time_diff = sampler->animation.timestamps[next_index] - sampler->animation.timestamps[previous_index]; f32 percent = (t - previous_time) / time_diff; quat interpolated_rot = quat_slerp(sampler->animation.values.values[previous_index].rotation, sampler->animation.values.values[next_index].rotation, percent); return (keyframe){ .rotation = interpolated_rot }; }