From 11724ef5e3cf82c917df4012866df93242db42a0 Mon Sep 17 00:00:00 2001 From: Irlan Date: Sat, 15 Jun 2019 11:33:24 -0300 Subject: [PATCH] Put nodes in a broadphase to reduce tree updates --- include/bounce/softbody/softbody.h | 9 ++++++--- include/bounce/softbody/softbody_node.h | 4 ++-- src/bounce/softbody/softbody.cpp | 7 +++++-- src/bounce/softbody/softbody_node.cpp | 4 +++- 4 files changed, 16 insertions(+), 8 deletions(-) diff --git a/include/bounce/softbody/softbody.h b/include/bounce/softbody/softbody.h index 3e17de5..9506b96 100644 --- a/include/bounce/softbody/softbody.h +++ b/include/bounce/softbody/softbody.h @@ -22,7 +22,7 @@ #include #include -#include +#include class b3World; @@ -189,8 +189,11 @@ private: // Soft body triangles b3SoftBodyTriangle* m_triangles; - // Node tree - b3DynamicTree m_nodeTree; + // 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 7b7dd6f..bc9a98b 100644 --- a/include/bounce/softbody/softbody_node.h +++ b/include/bounce/softbody/softbody_node.h @@ -163,8 +163,8 @@ private: // Node and body contact b3NodeBodyContact m_bodyContact; - // Tree identifier - u32 m_treeId; + // Broadphase proxy + u32 m_broadPhaseId; // Soft body b3SoftBody* m_body; diff --git a/src/bounce/softbody/softbody.cpp b/src/bounce/softbody/softbody.cpp index 408338b..2448d1e 100644 --- a/src/bounce/softbody/softbody.cpp +++ b/src/bounce/softbody/softbody.cpp @@ -463,6 +463,7 @@ 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; @@ -489,7 +490,7 @@ b3SoftBody::b3SoftBody(const b3SoftBodyDef& def) b3AABB3 aabb; aabb.Set(n->m_position, 0.0f); - n->m_treeId = m_nodeTree.InsertNode(aabb, n); + n->m_broadPhaseId = m_broadPhase.CreateProxy(aabb, n); } // Compute mass @@ -778,7 +779,7 @@ void b3SoftBody::UpdateContacts() continue; } - b3AABB3 aabb = m_nodeTree.GetAABB(n->m_treeId); + b3AABB3 aabb = m_broadPhase.GetAABB(n->m_broadPhaseId); b3SoftBodyUpdateContactsQueryListener listener; listener.sphere.vertex = n->m_position; @@ -839,6 +840,8 @@ void b3SoftBody::Step(float32 dt, u32 velocityIterations, u32 positionIterations { B3_PROFILE("Soft Body Step"); + m_dt = dt; + // Update contacts UpdateContacts(); diff --git a/src/bounce/softbody/softbody_node.cpp b/src/bounce/softbody/softbody_node.cpp index e18ffed..9df0ad4 100644 --- a/src/bounce/softbody/softbody_node.cpp +++ b/src/bounce/softbody/softbody_node.cpp @@ -39,5 +39,7 @@ void b3SoftBodyNode::Synchronize() b3AABB3 aabb; aabb.Set(m_position, m_radius); - m_body->m_nodeTree.UpdateNode(m_treeId, aabb); + b3Vec3 displacement = m_body->m_dt * m_velocity; + + m_body->m_broadPhase.MoveProxy(m_broadPhaseId, aabb, displacement); } \ No newline at end of file