environment, spring: Use StiffnessAndDamping for springs
Should improve springs significantly.
This commit is contained in:
parent
2242614d4a
commit
17b5e73799
|
@ -478,10 +478,9 @@ JoltPhysicsSpring::JoltPhysicsSpring( JPH::PhysicsSystem *pPhysicsSystem, JoltPh
|
||||||
settings.mMinDistance = m_OnlyStretch ? 0.0f : SourceToJolt::Distance( pParams->naturalLength );
|
settings.mMinDistance = m_OnlyStretch ? 0.0f : SourceToJolt::Distance( pParams->naturalLength );
|
||||||
settings.mMaxDistance = SourceToJolt::Distance( pParams->naturalLength );
|
settings.mMaxDistance = SourceToJolt::Distance( pParams->naturalLength );
|
||||||
|
|
||||||
settings.mLimitsSpringSettings.mMode = JPH::ESpringMode::FrequencyAndDamping;
|
settings.mLimitsSpringSettings.mMode = JPH::ESpringMode::StiffnessAndDamping;
|
||||||
settings.mLimitsSpringSettings.mFrequency = GetSpringFrequency( pParams->constant, m_pObjectStart, m_pObjectEnd );
|
settings.mLimitsSpringSettings.mFrequency = pParams->constant;
|
||||||
// TODO(Josh): The damping values are normally fucking crazy like 5500 from Source... wtf is going on here.
|
settings.mLimitsSpringSettings.mDamping = pParams->damping;
|
||||||
settings.mLimitsSpringSettings.mDamping = 0.0f;
|
|
||||||
|
|
||||||
m_pConstraint = static_cast< JPH::DistanceConstraint * >( settings.Create( *refBody, *attBody ) );
|
m_pConstraint = static_cast< JPH::DistanceConstraint * >( settings.Create( *refBody, *attBody ) );
|
||||||
m_pConstraint->SetEnabled( true );
|
m_pConstraint->SetEnabled( true );
|
||||||
|
@ -523,7 +522,7 @@ void JoltPhysicsSpring::SetSpringConstant( float flSpringConstant )
|
||||||
m_pObjectEnd->Wake();
|
m_pObjectEnd->Wake();
|
||||||
|
|
||||||
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
|
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
|
||||||
springSettings.mFrequency = GetSpringFrequency( flSpringConstant, m_pObjectStart, m_pObjectEnd );
|
springSettings.mStiffness = flSpringConstant;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
|
void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
|
||||||
|
@ -531,7 +530,8 @@ void JoltPhysicsSpring::SetSpringDamping( float flSpringDamping )
|
||||||
m_pObjectStart->Wake();
|
m_pObjectStart->Wake();
|
||||||
m_pObjectEnd->Wake();
|
m_pObjectEnd->Wake();
|
||||||
|
|
||||||
//m_pConstraint->SetDamping( flSpringDamping );
|
JPH::SpringSettings& springSettings = m_pConstraint->GetLimitsSpringSettings();
|
||||||
|
springSettings.mDamping = flSpringDamping;
|
||||||
}
|
}
|
||||||
|
|
||||||
void JoltPhysicsSpring::SetSpringLength( float flSpringLength )
|
void JoltPhysicsSpring::SetSpringLength( float flSpringLength )
|
||||||
|
|
|
@ -283,7 +283,3 @@ inline float GetInvEffectiveMass( JoltPhysicsObject *pObject0, JoltPhysicsObject
|
||||||
return ( pObject0->IsStatic() ? 0.0f : pObject0->GetInvMass() ) + ( pObject1->IsStatic() ? 0.0f : pObject1->GetInvMass() );
|
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 );
|
|
||||||
}
|
|
||||||
|
|
Loading…
Reference in New Issue