Optionally enable infinite constraint error.
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
@@ -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
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user