Improve side impulse calculation
This commit is contained in:
parent
4dbae5a738
commit
a36e5951ff
|
@ -524,7 +524,7 @@ void VehicleBody::_update_suspension(PhysicsDirectBodyState *s) {
|
||||||
|
|
||||||
//bilateral constraint between two dynamic objects
|
//bilateral constraint between two dynamic objects
|
||||||
void VehicleBody::_resolve_single_bilateral(PhysicsDirectBodyState *s, const Vector3 &pos1,
|
void VehicleBody::_resolve_single_bilateral(PhysicsDirectBodyState *s, const Vector3 &pos1,
|
||||||
PhysicsBody *body2, const Vector3 &pos2, const Vector3 &normal, real_t &impulse) {
|
PhysicsBody *body2, const Vector3 &pos2, const Vector3 &normal, real_t &impulse, real_t p_rollInfluence) {
|
||||||
|
|
||||||
real_t normalLenSqr = normal.length_squared();
|
real_t normalLenSqr = normal.length_squared();
|
||||||
//ERR_FAIL_COND( normalLenSqr < real_t(1.1));
|
//ERR_FAIL_COND( normalLenSqr < real_t(1.1));
|
||||||
|
@ -582,8 +582,12 @@ void VehicleBody::_resolve_single_bilateral(PhysicsDirectBodyState *s, const Vec
|
||||||
|
|
||||||
rel_vel = normal.dot(vel);
|
rel_vel = normal.dot(vel);
|
||||||
|
|
||||||
//TODO: move this into proper structure
|
// !BAS! We had this set to 0.4, in bullet its 0.2
|
||||||
real_t contactDamping = real_t(0.4);
|
// real_t contactDamping = real_t(0.2);
|
||||||
|
|
||||||
|
// !BAS! But seeing we apply this frame by frame, makes more sense to me to make this time based
|
||||||
|
// keeping in mind our anti roll factor
|
||||||
|
real_t contactDamping = s->get_step() / p_rollInfluence;
|
||||||
#define ONLY_USE_LINEAR_MASS
|
#define ONLY_USE_LINEAR_MASS
|
||||||
#ifdef ONLY_USE_LINEAR_MASS
|
#ifdef ONLY_USE_LINEAR_MASS
|
||||||
real_t massTerm = real_t(1.) / ((1.0 / mass) + b2invmass);
|
real_t massTerm = real_t(1.) / ((1.0 / mass) + b2invmass);
|
||||||
|
@ -704,7 +708,7 @@ void VehicleBody::_update_friction(PhysicsDirectBodyState *s) {
|
||||||
|
|
||||||
_resolve_single_bilateral(s, wheelInfo.m_raycastInfo.m_contactPointWS,
|
_resolve_single_bilateral(s, wheelInfo.m_raycastInfo.m_contactPointWS,
|
||||||
wheelInfo.m_raycastInfo.m_groundObject, wheelInfo.m_raycastInfo.m_contactPointWS,
|
wheelInfo.m_raycastInfo.m_groundObject, wheelInfo.m_raycastInfo.m_contactPointWS,
|
||||||
m_axle[i], m_sideImpulse[i]);
|
m_axle[i], m_sideImpulse[i], wheelInfo.m_rollInfluence);
|
||||||
|
|
||||||
m_sideImpulse[i] *= sideFrictionStiffness2;
|
m_sideImpulse[i] *= sideFrictionStiffness2;
|
||||||
}
|
}
|
||||||
|
|
|
@ -168,7 +168,7 @@ class VehicleBody : public RigidBody {
|
||||||
btVehicleWheelContactPoint(PhysicsDirectBodyState *s, PhysicsBody *body1, const Vector3 &frictionPosWorld, const Vector3 &frictionDirectionWorld, real_t maxImpulse);
|
btVehicleWheelContactPoint(PhysicsDirectBodyState *s, PhysicsBody *body1, const Vector3 &frictionPosWorld, const Vector3 &frictionDirectionWorld, real_t maxImpulse);
|
||||||
};
|
};
|
||||||
|
|
||||||
void _resolve_single_bilateral(PhysicsDirectBodyState *s, const Vector3 &pos1, PhysicsBody *body2, const Vector3 &pos2, const Vector3 &normal, real_t &impulse);
|
void _resolve_single_bilateral(PhysicsDirectBodyState *s, const Vector3 &pos1, PhysicsBody *body2, const Vector3 &pos2, const Vector3 &normal, real_t &impulse, real_t p_rollInfluence);
|
||||||
real_t _calc_rolling_friction(btVehicleWheelContactPoint &contactPoint);
|
real_t _calc_rolling_friction(btVehicleWheelContactPoint &contactPoint);
|
||||||
|
|
||||||
void _update_friction(PhysicsDirectBodyState *s);
|
void _update_friction(PhysicsDirectBodyState *s);
|
||||||
|
|
Loading…
Reference in New Issue