bugfix
This commit is contained in:
parent
bea108510f
commit
927b35a45d
@ -153,6 +153,9 @@ public:
|
|||||||
// Get the local position of the center of mass.
|
// Get the local position of the center of mass.
|
||||||
b3Vec3 GetLocalCenter() const;
|
b3Vec3 GetLocalCenter() const;
|
||||||
|
|
||||||
|
// Get the velocity at a given point.
|
||||||
|
b3Vec3 GetPointVelocity(const b3Vec3& point) const;
|
||||||
|
|
||||||
// Get the linear velocity of the center of mass.
|
// Get the linear velocity of the center of mass.
|
||||||
b3Vec3 GetLinearVelocity() const;
|
b3Vec3 GetLinearVelocity() const;
|
||||||
|
|
||||||
@ -556,6 +559,11 @@ inline void b3Body::SetGravityScale(float32 scale)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
inline b3Vec3 b3Body::GetPointVelocity(const b3Vec3& point) const
|
||||||
|
{
|
||||||
|
return m_linearVelocity + b3Cross(m_angularVelocity, point - m_sweep.worldCenter);
|
||||||
|
}
|
||||||
|
|
||||||
inline b3Vec3 b3Body::GetLinearVelocity() const
|
inline b3Vec3 b3Body::GetLinearVelocity() const
|
||||||
{
|
{
|
||||||
return m_linearVelocity;
|
return m_linearVelocity;
|
||||||
|
@ -594,18 +594,6 @@ void b3Cloth::UpdateContacts()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
// Notify the new contact state
|
|
||||||
if (c0.n_active == false && c->n_active == true)
|
|
||||||
{
|
|
||||||
// The contact has begun
|
|
||||||
}
|
|
||||||
|
|
||||||
if (c0.n_active == true && c->active_n == false)
|
|
||||||
{
|
|
||||||
// The contact has ended
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (c->n_active == false)
|
if (c->n_active == false)
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
@ -618,13 +606,16 @@ void b3Cloth::UpdateContacts()
|
|||||||
}
|
}
|
||||||
|
|
||||||
b3Shape* s = c->s2;
|
b3Shape* s = c->s2;
|
||||||
|
b3Body* b = s->GetBody();
|
||||||
b3Vec3 n = c->n;
|
b3Vec3 n = c->n;
|
||||||
float32 u = s->GetFriction();
|
float32 u = s->GetFriction();
|
||||||
float32 normalForce = c0.Fn;
|
float32 normalForce = c0.Fn;
|
||||||
float32 maxFrictionForce = u * normalForce;
|
float32 maxFrictionForce = u * normalForce;
|
||||||
|
|
||||||
// Relative velocity
|
// Relative velocity at contact point
|
||||||
b3Vec3 dv = p->m_velocity;
|
b3Vec3 v1 = b->GetPointVelocity(c->p);
|
||||||
|
b3Vec3 v2 = p->m_velocity;
|
||||||
|
b3Vec3 dv = v2 - v1;
|
||||||
|
|
||||||
b3Vec3 t1 = dv - b3Dot(dv, n) * n;
|
b3Vec3 t1 = dv - b3Dot(dv, n) * n;
|
||||||
if (b3Dot(t1, t1) > B3_EPSILON * B3_EPSILON)
|
if (b3Dot(t1, t1) > B3_EPSILON * B3_EPSILON)
|
||||||
@ -637,11 +628,6 @@ void b3Cloth::UpdateContacts()
|
|||||||
|
|
||||||
c->t1 = t1;
|
c->t1 = t1;
|
||||||
c->t2 = t2;
|
c->t2 = t2;
|
||||||
|
|
||||||
//c->f_active = true;
|
|
||||||
//c->f.m_type = e_frictionForce;
|
|
||||||
//c->f.m_p = p;
|
|
||||||
//c->f.m_kd = 10.0f;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
b3Vec3 ts[2];
|
b3Vec3 ts[2];
|
||||||
@ -676,6 +662,22 @@ void b3Cloth::UpdateContacts()
|
|||||||
|
|
||||||
c->t1_active = t_active[0];
|
c->t1_active = t_active[0];
|
||||||
c->t2_active = t_active[1];
|
c->t2_active = t_active[1];
|
||||||
|
|
||||||
|
if (c0.t1_active == true)
|
||||||
|
{
|
||||||
|
if (c0.Ft1 > maxFrictionForce)
|
||||||
|
{
|
||||||
|
c->t1_active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (c0.t2_active == true)
|
||||||
|
{
|
||||||
|
if (c0.Ft2 > maxFrictionForce)
|
||||||
|
{
|
||||||
|
c->t2_active = false;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user