Page 1 of 1

How to compute Lateral Friction Direction ?

Posted: Wed Aug 24, 2016 9:22 am
After compute the Jacobian of contact point constraint,
I compute the Jacobian of friction ,I have to compute the friction Direction Dk whick store in cp.m_lateralFrictionDir1.
But it's not clear about why compute this way below

Code: Select all

``````btVector3 tbRigidBody::getVelocityInLocalPoint(const btVector3& rel_pos) const
{
//we also calculate lin/ang velocity for kinematic objects
return m_linearVelocity + m_angularVelocity.cross(rel_pos);

//for kinematic objects, we could also use use:
//		return 	(m_worldTransform(rel_pos) - m_interpolationWorldTransform(rel_pos)) / m_kinematicTimeStep;
}
/////setup the friction constraints
btVector3 vel1 = rb0 ? rb0->getVelocityInLocalPoint(rel_pos1) : btVector3(0,0,0);
btVector3 vel2 = rb1 ? rb1->getVelocityInLocalPoint(rel_pos2) : btVector3(0,0,0);

vel  = vel1 - vel2;

rel_vel = cp.m_normalWorldOnB.dot(vel);

{
btVector3 frictionDir1 = vel - cp.m_normalWorldOnB * rel_vel;
btScalar lat_rel_vel = frictionDir1.length2();
if (lat_rel_vel > SIMD_EPSILON)//0.0f)
{
//use projected normal direction as first friction direction and cross product of normal and frictionDir1 as second friction direction
frictionDir1 /= btSqrt(lat_rel_vel);
btVector3 frictionDir2 = frictionDir1.cross(cp.m_normalWorldOnB);
frictionDir2.normalize();
} else
{
//calculate two orthogonal vectors to normal direction
//re-calculate friction direction every frame, todo: check if this is really needed
btVector3   frictionDir1,frictionDir2;
btPlaneSpace1(cp.m_normalWorldOnB,frictionDir1,frictionDir2);