From 17b5e7379910ddf98da2c9a784a4c781dab5e6d5 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Tue, 1 Aug 2023 02:26:07 -0700 Subject: [PATCH] environment, spring: Use StiffnessAndDamping for springs Should improve springs significantly. --- vphysics_jolt/vjolt_environment.cpp | 12 ++++++------ vphysics_jolt/vjolt_object.h | 4 ---- 2 files changed, 6 insertions(+), 10 deletions(-) diff --git a/vphysics_jolt/vjolt_environment.cpp b/vphysics_jolt/vjolt_environment.cpp index cafdd78..34baf4b 100644 --- a/vphysics_jolt/vjolt_environment.cpp +++ b/vphysics_jolt/vjolt_environment.cpp @@ -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 ) diff --git a/vphysics_jolt/vjolt_object.h b/vphysics_jolt/vjolt_object.h index 8134ab5..aeeab42 100644 --- a/vphysics_jolt/vjolt_object.h +++ b/vphysics_jolt/vjolt_object.h @@ -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 ); -}