Synchronize node AABB given displacement
This commit is contained in:
parent
9d935ea17f
commit
170793896d
@ -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;
|
||||||
};
|
};
|
||||||
|
@ -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
|
||||||
|
@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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);
|
||||||
}
|
}
|
Loading…
x
Reference in New Issue
Block a user