Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- tVec3f tRigidBody::fComputeImpulseToChangeRelativePointVel( f32 dt, const tVec3f& worldPointa, const tVec3f& worldPointb, const tVec3f& direction, float magnitude, const tRigidBody& otherBody )
- {
- tVec3f offsetA = worldPointa - fTransform( ).fGetTranslation( );
- tVec3f offsetCrossNA = offsetA.fCross( direction );
- offsetCrossNA = mWorldInertiaInv.fXformVector( offsetCrossNA );
- offsetCrossNA = offsetCrossNA.fCross( offsetA );
- f32 offsetCrossNSquaredA = offsetCrossNA.fDot( direction );
- tVec3f offsetB = worldPointb - otherBody.fTransform( ).fGetTranslation( );
- tVec3f offsetCrossNB = offsetB.fCross(direction);
- offsetCrossNB = otherBody.fWorldInertiaInv( ).fXformVector( offsetCrossNB );
- offsetCrossNB = offsetCrossNB.fCross( offsetB );
- f32 offsetCrossNSquaredB = offsetCrossNB.fDot( direction );
- //j = magnitude
- // ----------------------------------------------
- // 1/ma + 1/mb + Dot(N, ((rap x direction) / Ia) x rap) + Dot(N, ((rbp x direction)2 / Ib) / rbp)
- f32 denominator = 1 / mMass + 1 / otherBody.fMass( ) + offsetCrossNSquaredA + offsetCrossNSquaredB;
- f32 j = magnitude / denominator;
- tVec3f impulse = direction * j;
- return impulse;
- }
Add Comment
Please, Sign In to add comment