diff --git a/inc/hgl/math/Matrix.h b/inc/hgl/math/Matrix.h index 8e406e0..26d4e2a 100644 --- a/inc/hgl/math/Matrix.h +++ b/inc/hgl/math/Matrix.h @@ -169,6 +169,16 @@ namespace hgl angle=glm::degrees(glm::angle(quat)); axis=glm::axis(quat); } + + inline Quatf LerpQuat(const Quatf &from,const Quatf &to,const float t) + { + return glm::lerp(from,to,t); + } + + inline Quatf SLerpQuat(const Quatf &from,const Quatf &to,const float t) + { + return glm::slerp(from,to,t); + } inline Vector3f TransformPosition(const Matrix4f &m,const Vector3f &v) { @@ -393,5 +403,7 @@ namespace hgl };//Transform constexpr const size_t TransformMatrix4fLength=sizeof(Transform); + + Transform Blend(const Transform &from,const Transform &to,const float t); }//namespace hgl #endif//HGL_ALGORITHM_MATH_VECTOR_MATRIX_INCLUDE diff --git a/src/Math/Matrix4f.cpp b/src/Math/Matrix4f.cpp index e18c67e..6624b56 100644 --- a/src/Math/Matrix4f.cpp +++ b/src/Math/Matrix4f.cpp @@ -1,4 +1,4 @@ -#include +#include // Vulkan Cookbook // ISBN: 9781786468154 @@ -167,4 +167,15 @@ namespace hgl return true; } + + Transform Blend(const Transform &from,const Transform &to,const float t) + { + Transform result; + + result.SetTranslation( from.GetTranslation()*(1.0f-t) + to.GetTranslation() *t); + result.SetRotation( SLerpQuat(from.GetRotationQuat(),to.GetRotationQuat(),t)); + result.SetScale( from.GetScale() *(1.0f-t) + to.GetScale() *t); + + return result; + } }//namespace hgl