-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathinterpolatedTransform.hpp
32 lines (26 loc) · 1.21 KB
/
interpolatedTransform.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#pragma once
#include <glm/glm.hpp>
#include <glm/gtc/quaternion.hpp>
#include <glm/gtx/quaternion.hpp>
#include "transform.hpp"
class InterpolatedTransform {
public:
const Transform *baseTransform;
glm::vec3 interpolatedPosition{};
glm::vec3 interpolatedScale{};
glm::quat interpolatedRotation{};
explicit InterpolatedTransform(const Transform *transform) : baseTransform(transform) {}
[[nodiscard]] glm::vec4 getPosition() const { return glm::vec4(interpolatedPosition, 1.0f); }
void calculateInterpolation(float alpha) {
interpolatedPosition =
glm::mix(glm::vec3(baseTransform->previousPosition), glm::vec3(baseTransform->position), alpha);
interpolatedScale = baseTransform->previousScale;
interpolatedRotation = glm::slerp(baseTransform->previousRotation, baseTransform->rotation, alpha);
}
[[nodiscard]] glm::mat4 getInterpolatedModelMatrix() const {
glm::mat4 model = math::translateMatrix(interpolatedPosition.x, interpolatedPosition.y, interpolatedPosition.z);
model *= glm::toMat4(interpolatedRotation);
model *= math::scaleMatrix(interpolatedScale.x, interpolatedScale.y, interpolatedScale.z);
return model;
}
};