SnapAxisYToNormal_UsingNlerp implemented
This commit is contained in:
parent
7087421bb9
commit
408d51e46b
|
@ -728,13 +728,27 @@ namespace LinearAlgebra3D
|
||||||
{ return normalizedAxis * ( vector.Dot(normalizedAxis) ); }
|
{ return normalizedAxis * ( vector.Dot(normalizedAxis) ); }
|
||||||
|
|
||||||
template<typename ScalarType>
|
template<typename ScalarType>
|
||||||
::LinearAlgebra::Matrix4x4<ScalarType> & SnapAxisYToAxis_Nlerp( ::LinearAlgebra::Matrix4x4<ScalarType> &rotation, const ::LinearAlgebra::Vector4<ScalarType> &normalizedAxis )
|
::LinearAlgebra::Matrix4x4<ScalarType> & SnapAxisYToNormal_UsingNlerp( ::LinearAlgebra::Matrix4x4<ScalarType> &rotation, const ::LinearAlgebra::Vector4<ScalarType> &normalizedAxis )
|
||||||
{
|
{
|
||||||
|
ScalarType projectedMagnitude = rotation.v[0].Dot( normalizedAxis );
|
||||||
|
if( projectedMagnitude == 1 )
|
||||||
|
{ // infinite possible solutions -> roadtrip!
|
||||||
|
::LinearAlgebra::Vector4<ScalarType> interpolated = ::LinearAlgebra::Nlerp( rotation.v[1], normalizedAxis, t );
|
||||||
|
|
||||||
|
// interpolated.Dot( interpolated ) == 0 should be impossible at this point
|
||||||
|
projectedMagnitude = rotation.v[0].Dot( interpolated );
|
||||||
|
rotation.v[0] -= projectedMagnitude * interpolated;
|
||||||
|
rotation.v[0].Normalize();
|
||||||
|
projectedMagnitude = rotation.v[0].Dot( normalizedAxis );
|
||||||
|
}
|
||||||
|
rotation.v[0] -= projectedMagnitude * normalizedAxis;
|
||||||
|
rotation.v[0].Normalize();
|
||||||
|
rotation.v[1] = normalizedAxis;
|
||||||
|
rotation.v[2] = rotation.v[0].Cross( rotation.v[1] );
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename ScalarType>
|
template<typename ScalarType>
|
||||||
::LinearAlgebra::Matrix4x4<ScalarType> & InterpolateAxisYToAxis_Nlerp( ::LinearAlgebra::Matrix4x4<ScalarType> &rotation, const ::LinearAlgebra::Vector4<ScalarType> &normalizedAxis, ScalarType t )
|
::LinearAlgebra::Matrix4x4<ScalarType> & InterpolateAxisYToNormal_UsingNlerp( ::LinearAlgebra::Matrix4x4<ScalarType> &rotation, const ::LinearAlgebra::Vector4<ScalarType> &normalizedAxis, ScalarType t )
|
||||||
{
|
{
|
||||||
::LinearAlgebra::Vector4<ScalarType> interpolated = ::LinearAlgebra::Nlerp( rotation.v[1], normalizedAxis, t );
|
::LinearAlgebra::Vector4<ScalarType> interpolated = ::LinearAlgebra::Nlerp( rotation.v[1], normalizedAxis, t );
|
||||||
if( interpolated.Dot(interpolated) == 0 )
|
if( interpolated.Dot(interpolated) == 0 )
|
||||||
|
|
Loading…
Reference in New Issue