Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void RigidBodyDerivatives( const float t, const void *clientData, const float *state, float *derivatives ) {
- const idPhysics_RigidBody *p = (idPhysics_RigidBody *) clientData;
- rigidBodyIState_t *s = (rigidBodyIState_t *) state;
- // NOTE: this struct should be build conform rigidBodyIState_t
- struct rigidBodyDerivatives_s {
- idVec3 linearVelocity;
- idMat3 angularMatrix;
- idVec3 force;
- idVec3 torque;
- } *d = (struct rigidBodyDerivatives_s *) derivatives;
- idVec3 angularVelocity;
- idMat3 inverseWorldInertiaTensor;
- inverseWorldInertiaTensor = s->orientation * p->inverseInertiaTensor * s->orientation.Transpose();
- angularVelocity = inverseWorldInertiaTensor * s->angularMomentum;
- // derivatives
- d->linearVelocity = p->inverseMass * s->linearMomentum;
- d->angularMatrix = SkewSymmetric( angularVelocity ) * s->orientation;
- d->force = - p->linearFriction * s->linearMomentum + p->current.externalForce;
- d->torque = - p->angularFriction * s->angularMomentum + p->current.externalTorque;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement