26 #define USE_OFFSET_FOR_CONSTANT_FRAME true
166 for (i = 0; i < 3; i++)
252 btVector3 ofs = trB.getOrigin() - trA.getOrigin();
269 btVector3 ax1A = trA.getBasis().getColumn(0);
270 btVector3 ax1B = trB.getBasis().getColumn(0);
275 ax1 = ax1A * factA + ax1B * factB;
282 ax1 = trA.getBasis().getColumn(0);
284 p = trA.getBasis().getColumn(1);
285 q = trA.getBasis().getColumn(2);
351 btVector3 tmpA(0, 0, 0), tmpB(0, 0, 0), relA(0, 0, 0), relB(0, 0, 0),
c(0, 0, 0);
355 relB = trB.getOrigin() - bodyB_trans.getOrigin();
361 relA = trA.getOrigin() - bodyA_trans.getOrigin();
367 btVector3 totalDist = projA + ax1 * sliderOffs - projB;
369 relA = orthoA + totalDist * factA;
370 relB = orthoB - totalDist * factB;
372 p = orthoB * factA + orthoA * factB;
380 p = trA.getBasis().getColumn(1);
385 tmpA = relA.cross(p);
386 tmpB = relB.cross(p);
389 tmpA = relA.cross(q);
390 tmpB = relB.cross(q);
407 c = bodyB_trans.getOrigin() - bodyA_trans.getOrigin();
409 for (i = 0; i < 3; i++) info->
m_J1angularAxis[s2 + i] = factA * tmp[i];
410 for (i = 0; i < 3; i++) info->
m_J2angularAxis[s2 + i] = factB * tmp[i];
412 for (i = 0; i < 3; i++) info->
m_J1angularAxis[s3 + i] = factA * tmp[i];
413 for (i = 0; i < 3; i++) info->
m_J2angularAxis[s3 + i] = factB * tmp[i];
424 k = info->
fps * currERP;
428 rhs = k * q.dot(ofs);
442 limit = (limit_err >
btScalar(0.0)) ? 2 : 1;
446 if (limit || powered)
468 tmpA = relA.cross(ax1);
469 tmpB = relB.cross(ax1);
492 if (limit && (lostop == histop))
514 k = info->
fps * currERP;
520 if (lostop == histop)
540 vel -= linVelB.dot(ax1);
560 if (newc < info->m_constraintError[srow])
576 limit = (limit_err >
btScalar(0.0)) ? 1 : 2;
580 if (limit || powered)
594 if (limit && (lostop == histop))
612 k = info->
fps * currERP;
618 if (lostop == histop)
658 if (newc < info->m_constraintError[srow])
virtual void getInfo2(btConstraintInfo2 *info)
virtual void setParam(int num, btScalar value, int axis=-1)
bool m_useSolveConstraintObsolete
virtual void getInfo1(btConstraintInfo1 *info)
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btMatrix3x3 &invInertiaWorldA, const btMatrix3x3 &invInertiaWorldB)
virtual btScalar getParam(int num, int axis=-1) const
return the local value of parameter
void getInfo1NonVirtual(btConstraintInfo1 *info)
btFixedConstraint btRigidBody & rbB
btFixedConstraint btRigidBody const btTransform & frameInA
btFixedConstraint btRigidBody const btTransform const btTransform & frameInB
const btTransform & getCalculatedTransformA() const
Gets the global transform of the offset for body A.
btTransform m_calculatedTransformB
bool m_useLinearReferenceFrameA
const btTransform & getCalculatedTransformB() const
Gets the global transform of the offset for body B.
void calculateTransforms(const btTransform &transA, const btTransform &transB)
Calcs global transform of the offsets.
btTransform m_calculatedTransformA
bool m_useOffsetForConstraintFrame
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
SIMD_FORCE_INLINE btScalar btFabs(btScalar x)
SIMD_FORCE_INLINE btScalar btSqrt(btScalar y)
SIMD_FORCE_INLINE btScalar btAtan2(btScalar x, btScalar y)
#define USE_OFFSET_FOR_CONSTANT_FRAME
btScalar m_softnessOrthoLin
btScalar getDampingLimLin()
btScalar getSoftnessLimAng()
@ BT_SLIDER_FLAGS_CFM_DIRANG
@ BT_SLIDER_FLAGS_ERP_LIMLIN
@ BT_SLIDER_FLAGS_CFM_DIRLIN
@ BT_SLIDER_FLAGS_CFM_ORTANG
@ BT_SLIDER_FLAGS_CFM_ORTLIN
@ BT_SLIDER_FLAGS_ERP_ORTANG
@ BT_SLIDER_FLAGS_CFM_LIMANG
@ BT_SLIDER_FLAGS_ERP_ORTLIN
@ BT_SLIDER_FLAGS_CFM_LIMLIN
@ BT_SLIDER_FLAGS_ERP_LIMANG
btScalar getLowerLinLimit()
btScalar getUpperLinLimit()
btScalar m_dampingOrthoAng
btScalar m_restitutionDirAng
btScalar m_softnessDirLin
btScalar m_softnessOrthoAng
btSliderConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
btScalar m_restitutionLimLin
btScalar m_accumulatedLinMotorImpulse
btScalar m_maxLinMotorForce
btVector3 m_realPivotAInW
btScalar getMaxLinMotorForce()
#define SLIDER_CONSTRAINT_DEF_DAMPING
btScalar getMaxAngMotorForce()
btScalar m_restitutionLimAng
btScalar m_targetAngMotorVelocity
btScalar m_softnessDirAng
btScalar m_maxAngMotorForce
btScalar m_softnessLimAng
btScalar m_restitutionDirLin
btScalar m_accumulatedAngMotorImpulse
#define SLIDER_CONSTRAINT_DEF_SOFTNESS
btScalar m_restitutionOrthoLin
#define SLIDER_CONSTRAINT_DEF_RESTITUTION
btScalar getDampingLimAng()
btVector3 m_realPivotBInW
btScalar getUpperAngLimit()
btScalar getLowerAngLimit()
bool getPoweredAngMotor()
btScalar m_targetLinMotorVelocity
btScalar m_softnessLimLin
btScalar getSoftnessLimLin()
bool getPoweredLinMotor()
btScalar m_dampingOrthoLin
#define SLIDER_CONSTRAINT_DEF_CFM
btScalar getTargetLinMotorVelocity()
btScalar m_restitutionOrthoAng
btScalar getTargetAngMotorVelocity()
btScalar getMotorFactor(btScalar pos, btScalar lowLim, btScalar uppLim, btScalar vel, btScalar timeFact)
internal method used by the constraint solver, don't use them directly
SIMD_FORCE_INLINE btScalar btAdjustAngleToLimits(btScalar angleInRadians, btScalar angleLowerLimitInRadians, btScalar angleUpperLimitInRadians)
#define btAssertConstrParams(_par)
btTypedConstraint(btTypedConstraintType type, btRigidBody &rbA)
static btRigidBody & getFixedBody()
SIMD_FORCE_INLINE void btPlaneSpace1(const T &n, T &p, T &q)
btVector3
btVector3 can be used to represent 3D points and vectors. It has an un-used w component to suit 16-by...
const btVector3 & getAngularVelocity() const
btScalar getInvMass() const
const btTransform & getCenterOfMassTransform() const
const btVector3 & getLinearVelocity() const
btScalar * m_J2linearAxis
btScalar * m_J2angularAxis
btScalar * m_J1angularAxis
btScalar * m_constraintError
btScalar * m_J1linearAxis