Added btNearCallback. This is similar to Open Dynamics Engine (ODE) dNearCallback, but important differences:

- contact points are persistent (lifetime more then one frame, for warmstarting/incremental contact point management)
- continuous collision detection, time of impact
Added btRigidBody::isInWorld(), returns true if btRigidBody is inside a btCollisionWorld/btDynamicsWorld derived class
Added angularFactor to btRigidbody, this helps some character control (no angular impulse applied)
This commit is contained in:
ejcoumans
2006-12-04 15:42:03 +00:00
parent 2f557b2a4d
commit b6d1b4c94e
8 changed files with 142 additions and 90 deletions

View File

@@ -35,6 +35,7 @@ btRigidBody::btRigidBody(float mass, btMotionState* motionState, btCollisionShap
m_totalTorque(0.0f, 0.0f, 0.0f),
m_linearVelocity(0.0f, 0.0f, 0.0f),
m_angularVelocity(0.f,0.f,0.f),
m_angularFactor(1.f),
m_linearDamping(0.f),
m_angularDamping(0.5f),
m_optionalMotionState(motionState),

View File

@@ -47,6 +47,7 @@ class btRigidBody : public btCollisionObject
btVector3 m_linearVelocity;
btVector3 m_angularVelocity;
btScalar m_inverseMass;
btScalar m_angularFactor;
btVector3 m_gravity;
btVector3 m_invInertiaLocal;
@@ -159,7 +160,10 @@ public:
if (m_inverseMass != 0.f)
{
applyCentralImpulse(impulse);
applyTorqueImpulse(rel_pos.cross(impulse));
if (m_angularFactor)
{
applyTorqueImpulse(rel_pos.cross(impulse)*m_angularFactor);
}
}
}
@@ -169,7 +173,10 @@ public:
if (m_inverseMass != 0.f)
{
m_linearVelocity += linearComponent*impulseMagnitude;
m_angularVelocity += angularComponent*impulseMagnitude;
if (m_angularFactor)
{
m_angularVelocity += angularComponent*impulseMagnitude*m_angularFactor;
}
}
}
@@ -321,7 +328,20 @@ public:
int m_contactSolverType;
int m_frictionSolverType;
void setAngularFactor(float angFac)
{
m_angularFactor = angFac;
}
float getAngularFactor() const
{
return m_angularFactor;
}
//is this rigidbody added to a btCollisionWorld/btDynamicsWorld/btBroadphase?
bool isInWorld() const
{
return (getBroadphaseProxy() != 0);
}
int m_debugBodyId;
};