parent
2da3dd29fc
commit
b4eb3eb25d
|
@ -204,6 +204,19 @@ namespace LinearAlgebra
|
||||||
}
|
}
|
||||||
return output; // error: returning nullvector
|
return output; // error: returning nullvector
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
* Spherical Linear Interpolation on Quaternions
|
||||||
|
********************************************************************/
|
||||||
|
template<typename ScalarType>
|
||||||
|
inline Quaternion<ScalarType> Slerp( const Quaternion<ScalarType> &start, const Quaternion<ScalarType> &end, const ScalarType &t )
|
||||||
|
{
|
||||||
|
ScalarType angle = (ScalarType)::std::acos( Vector4(start.imaginary, start.real).Dot(Vector4(end.imaginary, end.real)) );
|
||||||
|
Quaternion<ScalarType> result = start * (ScalarType)::std::sin( angle * (1 - t) );
|
||||||
|
result += end * (ScalarType)::std::sin( angle * t );
|
||||||
|
result *= (ScalarType)1.0f / (ScalarType)::std::sin( angle );
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
namespace LinearAlgebra2D
|
namespace LinearAlgebra2D
|
||||||
|
@ -766,6 +779,18 @@ namespace LinearAlgebra3D
|
||||||
targetMem.v[3] = ::LinearAlgebra::Lerp( start.v[3], end.v[3], t );
|
targetMem.v[3] = ::LinearAlgebra::Lerp( start.v[3], end.v[3], t );
|
||||||
return targetMem;
|
return targetMem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename ScalarType>
|
||||||
|
::LinearAlgebra::Matrix4x4<ScalarType> & InterpolateOrientation_UsingNonRigidNlerp( const ::LinearAlgebra::Quaternion<ScalarType> &startR, const ::LinearAlgebra::Vector3<ScalarType> &startT, const ::LinearAlgebra::Quaternion<ScalarType> &endR, const ::LinearAlgebra::Vector3<ScalarType> &endT, ScalarType t, ::LinearAlgebra::Matrix4x4<ScalarType> &targetMem )
|
||||||
|
{
|
||||||
|
return InterpolateOrientation_UsingNonRigidNlerp( OrientationMatrix(startR, startT), OrientationMatrix(endR, endT), t, targetMem );
|
||||||
|
}
|
||||||
|
|
||||||
|
template<typename ScalarType>
|
||||||
|
::LinearAlgebra::Matrix4x4<ScalarType> & InterpolateOrientation_UsingSlerp( const ::LinearAlgebra::Quaternion<ScalarType> &startR, const ::LinearAlgebra::Vector3<ScalarType> &startT, const ::LinearAlgebra::Quaternion<ScalarType> &endR, const ::LinearAlgebra::Vector3<ScalarType> &endT, ScalarType t, ::LinearAlgebra::Matrix4x4<ScalarType> &targetMem )
|
||||||
|
{
|
||||||
|
return OrientationMatrix( ::LinearAlgebra::Slerp(startR, endR, t), ::LinearAlgebra::Lerp(::LinearAlgebra::Vector4<ScalarType>(startT, (ScalarType)1.0f), ::LinearAlgebra::Vector4<ScalarType>(endT, (ScalarType)1.0f), t).xyz, targetMem );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#include "Utilities.h"
|
#include "Utilities.h"
|
||||||
|
|
|
@ -57,6 +57,11 @@ namespace Oyster { namespace Math //! Oyster's native math library
|
||||||
* @return nullvector if Lerp( start, end, t ) is nullvector.
|
* @return nullvector if Lerp( start, end, t ) is nullvector.
|
||||||
********************************************************************/
|
********************************************************************/
|
||||||
using ::LinearAlgebra::Nlerp;
|
using ::LinearAlgebra::Nlerp;
|
||||||
|
|
||||||
|
/********************************************************************
|
||||||
|
* Spherical Linear Interpolation on Quaternions
|
||||||
|
********************************************************************/
|
||||||
|
using ::LinearAlgebra::Slerp;
|
||||||
} }
|
} }
|
||||||
|
|
||||||
inline ::Oyster::Math::Float2 & operator *= ( ::Oyster::Math::Float2 &left, const ::Oyster::Math::Float2 &right )
|
inline ::Oyster::Math::Float2 & operator *= ( ::Oyster::Math::Float2 &left, const ::Oyster::Math::Float2 &right )
|
||||||
|
@ -344,6 +349,7 @@ namespace Oyster { namespace Math3D //! Oyster's native math library specialized
|
||||||
using ::LinearAlgebra3D::SnapAxisYToNormal_UsingNlerp;
|
using ::LinearAlgebra3D::SnapAxisYToNormal_UsingNlerp;
|
||||||
using ::LinearAlgebra3D::InterpolateAxisYToNormal_UsingNlerp;
|
using ::LinearAlgebra3D::InterpolateAxisYToNormal_UsingNlerp;
|
||||||
using ::LinearAlgebra3D::InterpolateOrientation_UsingNonRigidNlerp;
|
using ::LinearAlgebra3D::InterpolateOrientation_UsingNonRigidNlerp;
|
||||||
|
using ::LinearAlgebra3D::InterpolateOrientation_UsingSlerp;
|
||||||
} }
|
} }
|
||||||
|
|
||||||
#endif
|
#endif
|
Loading…
Reference in New Issue