From 170793896d48cc89e0cda305b7173751fbcd08dd Mon Sep 17 00:00:00 2001 From: Irlan Date: Tue, 18 Jun 2019 12:48:34 -0300 Subject: [PATCH] Synchronize node AABB given displacement --- include/bounce/softbody/softbody.h | 3 --- include/bounce/softbody/softbody_node.h | 10 ++++++---- src/bounce/softbody/softbody.cpp | 7 +++---- src/bounce/softbody/softbody_node.cpp | 4 +--- 4 files changed, 10 insertions(+), 14 deletions(-) diff --git a/include/bounce/softbody/softbody.h b/include/bounce/softbody/softbody.h index 6099850..944fa9c 100644 --- a/include/bounce/softbody/softbody.h +++ b/include/bounce/softbody/softbody.h @@ -192,9 +192,6 @@ private: // Broadphase b3BroadPhase m_broadPhase; - // Time-step - float32 m_dt; - // Attached world b3World* m_world; }; diff --git a/include/bounce/softbody/softbody_node.h b/include/bounce/softbody/softbody_node.h index bc9a98b..87d039a 100644 --- a/include/bounce/softbody/softbody_node.h +++ b/include/bounce/softbody/softbody_node.h @@ -125,7 +125,7 @@ private: ~b3SoftBodyNode() { } // Synchronize node - void Synchronize(); + void Synchronize(const b3Vec3& displacement); // Type b3SoftBodyNodeType m_type; @@ -183,7 +183,7 @@ inline void b3SoftBodyNode::SetType(b3SoftBodyNodeType type) if (type == e_staticSoftBodyNode) { m_velocity.SetZero(); - Synchronize(); + Synchronize(b3Vec3_zero); } m_bodyContact.active = false; @@ -201,9 +201,11 @@ inline u32 b3SoftBodyNode::GetVertex() const inline void b3SoftBodyNode::SetPosition(const b3Vec3& position) { + b3Vec3 displacement = position - m_position; + m_position = position; - Synchronize(); + Synchronize(displacement); } inline const b3Vec3& b3SoftBodyNode::GetPosition() const @@ -244,7 +246,7 @@ inline void b3SoftBodyNode::SetRadius(float32 radius) { m_radius = radius; - Synchronize(); + Synchronize(b3Vec3_zero); } inline float32 b3SoftBodyNode::GetRadius() const diff --git a/src/bounce/softbody/softbody.cpp b/src/bounce/softbody/softbody.cpp index 2448d1e..4a55a2d 100644 --- a/src/bounce/softbody/softbody.cpp +++ b/src/bounce/softbody/softbody.cpp @@ -463,7 +463,6 @@ b3SoftBody::b3SoftBody(const b3SoftBodyDef& def) m_c_max = def.c_max; m_gravity.SetZero(); m_world = nullptr; - m_dt = 0.0f; const b3SoftBodyMesh* m = m_mesh; @@ -840,8 +839,6 @@ void b3SoftBody::Step(float32 dt, u32 velocityIterations, u32 positionIterations { B3_PROFILE("Soft Body Step"); - m_dt = dt; - // Update contacts UpdateContacts(); @@ -867,7 +864,9 @@ void b3SoftBody::Step(float32 dt, u32 velocityIterations, u32 positionIterations continue; } - n->Synchronize(); + b3Vec3 displacement = dt * n->m_velocity; + + n->Synchronize(displacement); } } diff --git a/src/bounce/softbody/softbody_node.cpp b/src/bounce/softbody/softbody_node.cpp index 9df0ad4..45a8eb0 100644 --- a/src/bounce/softbody/softbody_node.cpp +++ b/src/bounce/softbody/softbody_node.cpp @@ -34,12 +34,10 @@ void b3NodeBodyContactWorldPoint::Initialize(const b3NodeBodyContact* c, float32 separation = b3Dot(cB - cA, nA) - rA - rB; } -void b3SoftBodyNode::Synchronize() +void b3SoftBodyNode::Synchronize(const b3Vec3& displacement) { b3AABB3 aabb; aabb.Set(m_position, m_radius); - b3Vec3 displacement = m_body->m_dt * m_velocity; - m_body->m_broadPhase.MoveProxy(m_broadPhaseId, aabb, displacement); } \ No newline at end of file