Optionally enable infinite constraint error.

This commit is contained in:
stolk
2018-11-24 12:56:23 -08:00
parent 5dfcbe9a33
commit cec71341ad
2 changed files with 7 additions and 7 deletions

View File

@@ -860,12 +860,11 @@ int btGeneric6DofSpring2Constraint::get_limit_motor_info2(
// will we not request a velocity with the wrong direction ? // will we not request a velocity with the wrong direction ?
// and the answare is not, because in practice during the solving the current velocity is subtracted from the m_constraintError // and the answare is not, because in practice during the solving the current velocity is subtracted from the m_constraintError
// so the sign of the force that is really matters // so the sign of the force that is really matters
#if 0 // BEWARE! This whole approach has shown osciliation issues that prevent proper damping.
info->m_constraintError[srow] = (rotational ? -1 : 1) * (f < 0 ? -SIMD_INFINITY : SIMD_INFINITY); if ( m_flags & BT_6DOF_FLAGS_USE_INFINITE_ERROR )
#else info->m_constraintError[srow] = (rotational ? -1 : 1) * (f < 0 ? -SIMD_INFINITY : SIMD_INFINITY);
// Using infinite constraints makes the damping not work, and oscillate for ever. else
info->m_constraintError[srow] = vel + f / m * (rotational ? -1 : 1); info->m_constraintError[srow] = vel + f / m * (rotational ? -1 : 1);
#endif
btScalar minf = f < fd ? f : fd; btScalar minf = f < fd ? f : fd;
btScalar maxf = f < fd ? fd : f; btScalar maxf = f < fd ? fd : f;

View File

@@ -264,7 +264,8 @@ enum bt6DofFlags2
BT_6DOF_FLAGS_CFM_STOP2 = 1, BT_6DOF_FLAGS_CFM_STOP2 = 1,
BT_6DOF_FLAGS_ERP_STOP2 = 2, BT_6DOF_FLAGS_ERP_STOP2 = 2,
BT_6DOF_FLAGS_CFM_MOTO2 = 4, BT_6DOF_FLAGS_CFM_MOTO2 = 4,
BT_6DOF_FLAGS_ERP_MOTO2 = 8 BT_6DOF_FLAGS_ERP_MOTO2 = 8,
BT_6DOF_FLAGS_USE_INFINITE_ERROR = (1<<31),
}; };
#define BT_6DOF_FLAGS_AXIS_SHIFT2 4 // bits per axis #define BT_6DOF_FLAGS_AXIS_SHIFT2 4 // bits per axis