28 #define USE_OFFSET_FOR_CONSTANT_FRAME true
85 m_useSolveConstraintObsolete(false),
88 m_useLinearReferenceFrameA(useLinearReferenceFrameA)
97 m_useSolveConstraintObsolete(false),
99 m_useLinearReferenceFrameA(useLinearReferenceFrameA)
186 for(i = 0; i < 3; i++)
281 btScalar miA = rbAinvMass;
282 btScalar miB = rbBinvMass;
284 btScalar miS = miA + miB;
285 btScalar factA, factB;
302 ax1 = ax1A * factA + ax1B * factB;
352 btScalar k = info->
fps * currERP;
379 btVector3 tmpA(0,0,0), tmpB(0,0,0), relA(0,0,0), relB(0,0,0), c(0,0,0);
395 btVector3 totalDist = projA + ax1 * sliderOffs - projB;
397 relA = orthoA + totalDist * factA;
398 relB = orthoB - totalDist * factB;
400 p = orthoB * factA + orthoA * factB;
413 tmpA = relA.
cross(p);
414 tmpB = relB.
cross(p);
417 tmpA = relA.cross(q);
418 tmpB = relB.cross(q);
452 k = info->
fps * currERP;
454 btScalar rhs = k * p.
dot(ofs);
456 rhs = k * q.
dot(ofs);
471 limit = (limit_err >
btScalar(0.0)) ? 2 : 1;
479 if (limit || powered)
501 tmpA = relA.
cross(ax1);
502 tmpB = relB.
cross(ax1);
525 if(limit && (lostop == histop))
547 k = info->
fps * currERP;
572 btScalar vel = linVelA.
dot(ax1);
573 vel -= linVelB.
dot(ax1);
581 btScalar newc = -bounce * vel;
592 btScalar newc = -bounce * vel;
593 if(newc < info->m_constraintError[srow])
609 limit = (limit_err >
btScalar(0.0)) ? 1 : 2;
631 if(limit && (lostop == histop))
649 k = info->
fps * currERP;
683 btScalar newc = -bounce * vel;
694 btScalar newc = -bounce * vel;
695 if(newc < info->m_constraintError[srow])
btScalar * m_constraintError
btScalar getInvMass() const
void calculateTransforms(const btTransform &transA, const btTransform &transB)
#define SLIDER_CONSTRAINT_DEF_RESTITUTION
btScalar m_dampingOrthoAng
btScalar getMaxAngMotorForce()
const btTransform & getCalculatedTransformA() const
btScalar * m_J2angularAxis
const btTransform & getCalculatedTransformB() const
btScalar m_dampingOrthoLin
#define USE_OFFSET_FOR_CONSTANT_FRAME
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btVector3 &linVelA, const btVector3 &linVelB, btScalar rbAinvMass, btScalar rbBinvMass)
virtual void getInfo2(btConstraintInfo2 *info)
internal method used by the constraint solver, don't use them directly
btScalar m_restitutionOrthoAng
btScalar m_accumulatedAngMotorImpulse
void btPlaneSpace1(const T &n, T &p, T &q)
btScalar btSqrt(btScalar y)
btScalar m_accumulatedLinMotorImpulse
btScalar getLowerLinLimit()
btTransform m_calculatedTransformB
bool getPoweredLinMotor()
btScalar * m_J1angularAxis
btScalar m_targetLinMotorVelocity
btVector3 getColumn(int i) const
Get a column of the matrix as a vector.
btScalar dot(const btVector3 &v) const
Return the dot product.
bool getPoweredAngMotor()
btVector3 & normalize()
Normalize this vector x^2 + y^2 + z^2 = 1.
btSliderConstraint(btRigidBody &rbA, btRigidBody &rbB, const btTransform &frameInA, const btTransform &frameInB, bool useLinearReferenceFrameA)
btScalar getMaxLinMotorForce()
btScalar m_restitutionLimLin
btScalar getUpperAngLimit()
btScalar * m_J1linearAxis
btScalar m_softnessLimLin
const btTransform & getCenterOfMassTransform() const
btScalar m_restitutionLimAng
btScalar m_restitutionDirAng
btScalar btAtan2(btScalar x, btScalar y)
#define SLIDER_CONSTRAINT_DEF_CFM
btScalar getDampingLimAng()
const btVector3 & getAngularVelocity() const
btVector3 cross(const btVector3 &v) const
Return the cross product between this and another vector.
btScalar m_softnessDirLin
The btRigidBody is the main class for rigid body objects.
btVector3 m_realPivotBInW
btScalar m_softnessOrthoLin
virtual btScalar getParam(int num, int axis=-1) const
return the local value of parameter
btScalar m_targetAngMotorVelocity
virtual void getInfo1(btConstraintInfo1 *info)
internal method used by the constraint solver, don't use them directly
bool m_useOffsetForConstraintFrame
btScalar getUpperLinLimit()
btScalar getTargetLinMotorVelocity()
#define SLIDER_CONSTRAINT_DEF_SOFTNESS
void getInfo1NonVirtual(btConstraintInfo1 *info)
btScalar btAdjustAngleToLimits(btScalar angleInRadians, btScalar angleLowerLimitInRadians, btScalar angleUpperLimitInRadians)
btVector3 can be used to represent 3D points and vectors.
btScalar length2() const
Return the length of the vector squared.
bool m_useLinearReferenceFrameA
btScalar getTargetAngMotorVelocity()
btScalar * m_J2linearAxis
btTransform m_calculatedTransformA
TypedConstraint is the baseclass for Bullet constraints and vehicles.
btScalar getSoftnessLimLin()
btScalar getMotorFactor(btScalar pos, btScalar lowLim, btScalar uppLim, btScalar vel, btScalar timeFact)
internal method used by the constraint solver, don't use them directly
btVector3 m_realPivotAInW
btScalar m_softnessDirAng
bool m_useSolveConstraintObsolete
for backwards compatibility during the transition to 'getInfo/getInfo2'
btScalar m_maxLinMotorForce
const btVector3 & getLinearVelocity() const
btScalar getLowerAngLimit()
btScalar m_restitutionDirLin
btScalar m_maxAngMotorForce
#define btAssertConstrParams(_par)
btScalar m_softnessLimAng
btScalar getDampingLimLin()
btScalar m_restitutionOrthoLin
btScalar m_softnessOrthoAng
btScalar getSoftnessLimAng()
#define SLIDER_CONSTRAINT_DEF_DAMPING
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
virtual void setParam(int num, btScalar value, int axis=-1)
override the default global value of a parameter (such as ERP or CFM), optionally provide the axis (0...
btScalar btFabs(btScalar x)