20btPoint2PointConstraint::btPoint2PointConstraint(
btRigidBody& rbA,
btRigidBody&
rbB,
const btVector3& pivotInA,
const btVector3& pivotInB)
25btPoint2PointConstraint::btPoint2PointConstraint(
btRigidBody& rbA,
const btVector3& pivotInA)
30void btPoint2PointConstraint::buildJacobian()
36 btVector3 normal(0, 0, 0);
38 for (
int i = 0; i < 3; i++)
65 info->m_numConstraintRows = 0;
70 info->m_numConstraintRows = 3;
89 info->m_J1linearAxis[0] = 1;
90 info->m_J1linearAxis[
info->rowskip + 1] = 1;
91 info->m_J1linearAxis[2 *
info->rowskip + 2] = 1;
93 btVector3 a1 = body0_trans.getBasis() *
getPivotInA();
95 btVector3* angular0 = (btVector3*)(
info->m_J1angularAxis);
96 btVector3* angular1 = (btVector3*)(
info->m_J1angularAxis +
info->rowskip);
97 btVector3* angular2 = (btVector3*)(
info->m_J1angularAxis + 2 *
info->rowskip);
98 btVector3 a1neg = -a1;
99 a1neg.getSkewSymmetricMatrix(angular0, angular1, angular2);
102 info->m_J2linearAxis[0] = -1;
103 info->m_J2linearAxis[
info->rowskip + 1] = -1;
104 info->m_J2linearAxis[2 *
info->rowskip + 2] = -1;
106 btVector3 a2 = body1_trans.getBasis() *
getPivotInB();
110 btVector3* angular0 = (btVector3*)(
info->m_J2angularAxis);
111 btVector3* angular1 = (btVector3*)(
info->m_J2angularAxis +
info->rowskip);
112 btVector3* angular2 = (btVector3*)(
info->m_J2angularAxis + 2 *
info->rowskip);
113 a2.getSkewSymmetricMatrix(angular0, angular1, angular2);
120 for (j = 0; j < 3; j++)
122 info->m_constraintError[j *
info->rowskip] = k * (a2[j] + body1_trans.getOrigin()[j] - a1[j] - body0_trans.getOrigin()[j]);
127 for (j = 0; j < 3; j++)
134 for (j = 0; j < 3; j++)
138 info->m_lowerLimit[j *
info->rowskip] = -impulseClamp;
139 info->m_upperLimit[j *
info->rowskip] = impulseClamp;
145void btPoint2PointConstraint::updateRHS(
btScalar timeStep)
179btScalar btPoint2PointConstraint::getParam(
int num,
int axis)
const
ATTR_WARN_UNUSED_RESULT const size_t num
bool m_useSolveConstraintObsolete
void getInfo2NonVirtual(btConstraintInfo2 *info, const btTransform &transA, const btTransform &transB, const btMatrix3x3 &invInertiaWorldA, const btMatrix3x3 &invInertiaWorldB)
void getInfo1NonVirtual(btConstraintInfo1 *info)
btFixedConstraint btRigidBody & rbB
const btVector3 & getPivotInB() const
const btVector3 & getPivotInA() const
btConstraintSetting m_setting
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
btSimdScalar m_appliedImpulse
#define btAssertConstrParams(_par)
@ POINT2POINT_CONSTRAINT_TYPE
btScalar getInvMass() const
const btVector3 & getInvInertiaDiagLocal() const
const btTransform & getCenterOfMassTransform() const
const btVector3 & getCenterOfMassPosition() const