environment, spring: Use StiffnessAndDamping for springs
continuous-integration/drone/push Build encountered an error Details

Should improve springs significantly.
This commit is contained in:
Joshua Ashton 2023-08-01 02:26:07 -07:00
parent 2242614d4a
commit 17b5e73799
2 changed files with 6 additions and 10 deletions

View File

@ -478,10 +478,9 @@ JoltPhysicsSpring::JoltPhysicsSpring( JPH::PhysicsSystem *pPhysicsSystem, JoltPh
settings.mMinDistance = m_OnlyStretch ? 0.0f : SourceToJolt::Distance( pParams->naturalLength );
settings.mMaxDistance = SourceToJolt::Distance( pParams->naturalLength );
settings.mLimitsSpringSettings.mMode = JPH::ESpringMode::FrequencyAndDamping;
settings.mLimitsSpringSettings.mFrequency = GetSpringFrequency( pParams->constant, m_pObjectStart, m_pObjectEnd );
// TODO(Josh): The damping values are normally fucking crazy like 5500 from Source... wtf is going on here.
settings.mLimitsSpringSettings.mDamping = 0.0f;
settings.mLimitsSpringSettings.mMode = JPH::ESpringMode::StiffnessAndDamping;
settings.mLimitsSpringSettings.mFrequency = pParams->constant;
settings.mLimitsSpringSettings.mDamping = pParams->damping;
m_pConstraint = static_cast< JPH::DistanceConstraint * >( settings.Create( *refBody, *attBody ) );
m_pConstraint->SetEnabled( true );
@ -523,7 +522,7 @@ void JoltPhysicsSpring::SetSpringConstant( float flSpringConstant )
m_pObjectEnd->Wake();
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
springSettings.mFrequency = GetSpringFrequency( flSpringConstant, m_pObjectStart, m_pObjectEnd );
springSettings.mStiffness = flSpringConstant;
}
void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
@ -531,7 +530,8 @@ void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
m_pObjectStart->Wake();
m_pObjectEnd->Wake();
//m_pConstraint->SetDamping( flSpringDamping );
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
springSettings.mDamping = flSpringDamping;
}
void JoltPhysicsSpring::SetSpringLength( float flSpringLength )

View File

@ -283,7 +283,3 @@ inline float GetInvEffectiveMass( JoltPhysicsObject *pObject0, JoltPhysicsObject
return ( pObject0->IsStatic() ? 0.0f : pObject0->GetInvMass() ) + ( pObject1->IsStatic() ? 0.0f : pObject1->GetInvMass() );
}
inline float GetSpringFrequency( float flConstant, JoltPhysicsObject *pObject0, JoltPhysicsObject *pObject1 )
{
return sqrt( flConstant * GetInvEffectiveMass( pObject0, pObject1 ) ) / ( 2.0f * M_PI_F );
}