41 residualSquare *= residualSquare;
43 return residualSquare;
55 return m_rsb->internalComputeNodeDeltaVelocity(
m_rsb->getInterpolationWorldTransform(),
m_node->index);
129 btVector3 deltaV_rel = deltaVa - deltaVb;
170 residualSquare *= residualSquare;
223 btVector3 impulse = impulse_normal + impulse_tangent + impulse_tangent2;
263 if (multibodyLinkCol)
265 const btScalar* deltaV_normal = &
m_contact->jacobianData_normal.m_deltaVelocitiesUnitImpulse[0];
279 const btScalar* deltaV_t1 = &
m_contact->jacobianData_t1.m_deltaVelocitiesUnitImpulse[0];
281 const btScalar* deltaV_t2 = &
m_contact->jacobianData_t2.m_deltaVelocitiesUnitImpulse[0];
287 return residualSquare;
293 const btScalar tangentImpulseFactorInv,
300 btScalar impulse_changed = deltaV_rel_tangent * tangentImpulseFactorInv;
301 deltaImpulse_tangent = rhs_tangent -
m_cfm_friction * appliedImpulse - impulse_changed;
303 btScalar sum = appliedImpulse + deltaImpulse_tangent;
304 if (
sum > upper_limit)
306 deltaImpulse_tangent = upper_limit - appliedImpulse;
307 appliedImpulse = upper_limit;
309 else if (
sum < lower_limit)
311 deltaImpulse_tangent = lower_limit - appliedImpulse;
312 appliedImpulse = lower_limit;
316 appliedImpulse =
sum;
333 m_nodeQueryIndex = contact.m_node->index;
337 m_nodeQueryIndex = m_node->index - rsb->m_nodeIndexOffset;
342 m_relPosA = contact.m_c1;
346 m_relPosA = btVector3(0,0,0);
470 if (multibodyLinkCol)
479 for (
int k = 0; k < ndof; ++k)
481 vel += local_dv[k] * J_n[k];
483 deltaVa =
m_contact->m_cti.m_normal * vel;
487 for (
int k = 0; k < ndof; ++k)
489 vel += local_dv[k] * J_t1[k];
494 for (
int k = 0; k < ndof; ++k)
496 vel += local_dv[k] * J_t2[k];
542 bool useStrainLimiting)
564 if (
m_face->m_n[0] == node)
568 if (
m_face->m_n[1] == node)
btScalar dot(const btQuaternion &q1, const btQuaternion &q2)
Calculate the dot product between two quaternions.
float btScalar
The btScalar type abstracts floating point numbers, to easily switch between double and single floati...
static T sum(const btAlignedObjectArray< T > &items)
btScalar btDot(const btVector3 &v1, const btVector3 &v2)
Return the dot product between two vectors.
int size() const
return the number of elements in the array
static btMultiBodyLinkCollider * upcast(btCollisionObject *colObj)
btMultiBody * m_multiBody
const btScalar * getDeltaVelocityVector() const
void applyDeltaVeeMultiDof2(const btScalar *delta_vee, btScalar multiplier)
virtual btMatrix3x3 getImpulseFactor(int n_node)
btVector3 can be used to represent 3D points and vectors.
btScalar dot(const btVector3 &v) const
Return the dot product.
btScalar norm() const
Return the norm (length) of the vector.
btVector3 normalized() const
Return a normalized version of this vector.
The btSolverBody is an internal datastructure for the constraint solver. Only necessary data is packe...