Synchronize node AABB given displacement

This commit is contained in:
Irlan 2019-06-18 12:48:34 -03:00
parent 9d935ea17f
commit 170793896d
4 changed files with 10 additions and 14 deletions

View File

@ -192,9 +192,6 @@ private:
// Broadphase // Broadphase
b3BroadPhase m_broadPhase; b3BroadPhase m_broadPhase;
// Time-step
float32 m_dt;
// Attached world // Attached world
b3World* m_world; b3World* m_world;
}; };

View File

@ -125,7 +125,7 @@ private:
~b3SoftBodyNode() { } ~b3SoftBodyNode() { }
// Synchronize node // Synchronize node
void Synchronize(); void Synchronize(const b3Vec3& displacement);
// Type // Type
b3SoftBodyNodeType m_type; b3SoftBodyNodeType m_type;
@ -183,7 +183,7 @@ inline void b3SoftBodyNode::SetType(b3SoftBodyNodeType type)
if (type == e_staticSoftBodyNode) if (type == e_staticSoftBodyNode)
{ {
m_velocity.SetZero(); m_velocity.SetZero();
Synchronize(); Synchronize(b3Vec3_zero);
} }
m_bodyContact.active = false; m_bodyContact.active = false;
@ -201,9 +201,11 @@ inline u32 b3SoftBodyNode::GetVertex() const
inline void b3SoftBodyNode::SetPosition(const b3Vec3& position) inline void b3SoftBodyNode::SetPosition(const b3Vec3& position)
{ {
b3Vec3 displacement = position - m_position;
m_position = position; m_position = position;
Synchronize(); Synchronize(displacement);
} }
inline const b3Vec3& b3SoftBodyNode::GetPosition() const inline const b3Vec3& b3SoftBodyNode::GetPosition() const
@ -244,7 +246,7 @@ inline void b3SoftBodyNode::SetRadius(float32 radius)
{ {
m_radius = radius; m_radius = radius;
Synchronize(); Synchronize(b3Vec3_zero);
} }
inline float32 b3SoftBodyNode::GetRadius() const inline float32 b3SoftBodyNode::GetRadius() const

View File

@ -463,7 +463,6 @@ b3SoftBody::b3SoftBody(const b3SoftBodyDef& def)
m_c_max = def.c_max; m_c_max = def.c_max;
m_gravity.SetZero(); m_gravity.SetZero();
m_world = nullptr; m_world = nullptr;
m_dt = 0.0f;
const b3SoftBodyMesh* m = m_mesh; const b3SoftBodyMesh* m = m_mesh;
@ -840,8 +839,6 @@ void b3SoftBody::Step(float32 dt, u32 velocityIterations, u32 positionIterations
{ {
B3_PROFILE("Soft Body Step"); B3_PROFILE("Soft Body Step");
m_dt = dt;
// Update contacts // Update contacts
UpdateContacts(); UpdateContacts();
@ -867,7 +864,9 @@ void b3SoftBody::Step(float32 dt, u32 velocityIterations, u32 positionIterations
continue; continue;
} }
n->Synchronize(); b3Vec3 displacement = dt * n->m_velocity;
n->Synchronize(displacement);
} }
} }

View File

@ -34,12 +34,10 @@ void b3NodeBodyContactWorldPoint::Initialize(const b3NodeBodyContact* c, float32
separation = b3Dot(cB - cA, nA) - rA - rB; separation = b3Dot(cB - cA, nA) - rA - rB;
} }
void b3SoftBodyNode::Synchronize() void b3SoftBodyNode::Synchronize(const b3Vec3& displacement)
{ {
b3AABB3 aabb; b3AABB3 aabb;
aabb.Set(m_position, m_radius); aabb.Set(m_position, m_radius);
b3Vec3 displacement = m_body->m_dt * m_velocity;
m_body->m_broadPhase.MoveProxy(m_broadPhaseId, aabb, displacement); m_body->m_broadPhase.MoveProxy(m_broadPhaseId, aabb, displacement);
} }