Differential D1739 Diff 5899 extern/bullet2/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h
Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletDynamics/Featherstone/btMultiBodyConstraintSolver.h
| Show All 13 Lines | |||||
| */ | */ | ||||
| #ifndef BT_MULTIBODY_CONSTRAINT_SOLVER_H | #ifndef BT_MULTIBODY_CONSTRAINT_SOLVER_H | ||||
| #define BT_MULTIBODY_CONSTRAINT_SOLVER_H | #define BT_MULTIBODY_CONSTRAINT_SOLVER_H | ||||
| #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" | #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" | ||||
| #include "btMultiBodySolverConstraint.h" | #include "btMultiBodySolverConstraint.h" | ||||
| #define DIRECTLY_UPDATE_VELOCITY_DURING_SOLVER_ITERATIONS | |||||
| class btMultiBody; | class btMultiBody; | ||||
| #include "btMultiBodyConstraint.h" | #include "btMultiBodyConstraint.h" | ||||
| ATTRIBUTE_ALIGNED16(class) btMultiBodyConstraintSolver : public btSequentialImpulseConstraintSolver | ATTRIBUTE_ALIGNED16(class) btMultiBodyConstraintSolver : public btSequentialImpulseConstraintSolver | ||||
| { | { | ||||
| protected: | protected: | ||||
| btMultiBodyConstraintArray m_multiBodyNonContactConstraints; | btMultiBodyConstraintArray m_multiBodyNonContactConstraints; | ||||
| btMultiBodyConstraintArray m_multiBodyNormalContactConstraints; | btMultiBodyConstraintArray m_multiBodyNormalContactConstraints; | ||||
| btMultiBodyConstraintArray m_multiBodyFrictionContactConstraints; | btMultiBodyConstraintArray m_multiBodyFrictionContactConstraints; | ||||
| btMultiBodyJacobianData m_data; | btMultiBodyJacobianData m_data; | ||||
| //temp storage for multi body constraints for a specific island/group called by 'solveGroup' | //temp storage for multi body constraints for a specific island/group called by 'solveGroup' | ||||
| btMultiBodyConstraint** m_tmpMultiBodyConstraints; | btMultiBodyConstraint** m_tmpMultiBodyConstraints; | ||||
| int m_tmpNumMultiBodyConstraints; | int m_tmpNumMultiBodyConstraints; | ||||
| void resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c); | void resolveSingleConstraintRowGeneric(const btMultiBodySolverConstraint& c); | ||||
| void resolveSingleConstraintRowGenericMultiBody(const btMultiBodySolverConstraint& c); | |||||
| void convertContacts(btPersistentManifold** manifoldPtr,int numManifolds, const btContactSolverInfo& infoGlobal); | void convertContacts(btPersistentManifold** manifoldPtr,int numManifolds, const btContactSolverInfo& infoGlobal); | ||||
| btMultiBodySolverConstraint& addMultiBodyFrictionConstraint(const btVector3& normalAxis,btPersistentManifold* manifold,int frictionIndex,btManifoldPoint& cp,btCollisionObject* colObj0,btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity=0, btScalar cfmSlip=0); | btMultiBodySolverConstraint& addMultiBodyFrictionConstraint(const btVector3& normalAxis,btPersistentManifold* manifold,int frictionIndex,btManifoldPoint& cp,btCollisionObject* colObj0,btCollisionObject* colObj1, btScalar relaxation, const btContactSolverInfo& infoGlobal, btScalar desiredVelocity=0, btScalar cfmSlip=0); | ||||
| void setupMultiBodyJointLimitConstraint(btMultiBodySolverConstraint& constraintRow, | void setupMultiBodyJointLimitConstraint(btMultiBodySolverConstraint& constraintRow, | ||||
| btScalar* jacA,btScalar* jacB, | btScalar* jacA,btScalar* jacB, | ||||
| btScalar penetration,btScalar combinedFrictionCoeff, btScalar combinedRestitutionCoeff, | btScalar penetration,btScalar combinedFrictionCoeff, btScalar combinedRestitutionCoeff, | ||||
| const btContactSolverInfo& infoGlobal); | const btContactSolverInfo& infoGlobal); | ||||
| void setupMultiBodyContactConstraint(btMultiBodySolverConstraint& solverConstraint, | void setupMultiBodyContactConstraint(btMultiBodySolverConstraint& solverConstraint, | ||||
| const btVector3& contactNormal, | const btVector3& contactNormal, | ||||
| btManifoldPoint& cp, const btContactSolverInfo& infoGlobal, | btManifoldPoint& cp, const btContactSolverInfo& infoGlobal, | ||||
| btScalar& relaxation, | btScalar& relaxation, | ||||
| bool isFriction, btScalar desiredVelocity=0, btScalar cfmSlip=0); | bool isFriction, btScalar desiredVelocity=0, btScalar cfmSlip=0); | ||||
| void convertMultiBodyContact(btPersistentManifold* manifold,const btContactSolverInfo& infoGlobal); | void convertMultiBodyContact(btPersistentManifold* manifold,const btContactSolverInfo& infoGlobal); | ||||
| virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | ||||
| // virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | // virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | ||||
| virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies ,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | virtual btScalar solveSingleIteration(int iteration, btCollisionObject** bodies ,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer); | ||||
| void applyDeltaVee(btScalar* deltaV, btScalar impulse, int velocityIndex, int ndof); | void applyDeltaVee(btScalar* deltaV, btScalar impulse, int velocityIndex, int ndof); | ||||
| void writeBackSolverBodyToMultiBody(btMultiBodySolverConstraint& constraint, btScalar deltaTime); | |||||
| public: | public: | ||||
| BT_DECLARE_ALIGNED_ALLOCATOR(); | BT_DECLARE_ALIGNED_ALLOCATOR(); | ||||
| ///this method should not be called, it was just used during porting/integration of Featherstone btMultiBody, providing backwards compatibility but no support for btMultiBodyConstraint (only contact constraints) | ///this method should not be called, it was just used during porting/integration of Featherstone btMultiBody, providing backwards compatibility but no support for btMultiBodyConstraint (only contact constraints) | ||||
| virtual btScalar solveGroup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifold,int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& info, btIDebugDraw* debugDrawer,btDispatcher* dispatcher); | virtual btScalar solveGroup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifold,int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& info, btIDebugDraw* debugDrawer,btDispatcher* dispatcher); | ||||
| virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject** bodies,int numBodies,const btContactSolverInfo& infoGlobal); | |||||
| virtual void solveMultiBodyGroup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifold,int numManifolds,btTypedConstraint** constraints,int numConstraints,btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer,btDispatcher* dispatcher); | virtual void solveMultiBodyGroup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifold,int numManifolds,btTypedConstraint** constraints,int numConstraints,btMultiBodyConstraint** multiBodyConstraints, int numMultiBodyConstraints, const btContactSolverInfo& info, btIDebugDraw* debugDrawer,btDispatcher* dispatcher); | ||||
| }; | }; | ||||
| #endif //BT_MULTIBODY_CONSTRAINT_SOLVER_H | #endif //BT_MULTIBODY_CONSTRAINT_SOLVER_H | ||||