Friction fix

special case; no movement
special case; movement directly into surface
.. dealt with
This commit is contained in:
Dander7BD 2014-02-04 08:55:57 +01:00
parent 358cddfd9a
commit d4bd72bb4a
1 changed files with 21 additions and 15 deletions

View File

@ -49,6 +49,9 @@ namespace Oyster { namespace Physics { namespace Formula
::Oyster::Math::Float4 relativeMomentum = momB - momA;
::Oyster::Math::Float4 tanFriction = relativeMomentum - relativeMomentum.Dot( iN ) * iN;
if( tanFriction.Dot(tanFriction) > 0.0f )
{ // no friction if moving directly into surface, or not at all.
tanFriction.Normalize();
::Oyster::Math::Float magnitudeFriction = -relativeMomentum.Dot( tanFriction );
@ -64,11 +67,14 @@ namespace Oyster { namespace Physics { namespace Formula
else
{
::Oyster::Math::Float dynamicFriction = 0.5f * ( dFA + dFB );
frictionImpulse = -i*tanFriction*dynamicFriction;
frictionImpulse = ( -i * dynamicFriction ) * tanFriction;
}
return ( 1 / mA ) * frictionImpulse;
}
else
return ::Oyster::Math::Float4::null;
}
}
} } }