Changeset View
Changeset View
Standalone View
Standalone View
extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.h
| Show All 17 Lines | |||||
| #define BT_MLCP_SOLVER_H | #define BT_MLCP_SOLVER_H | ||||
| #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" | #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" | ||||
| #include "LinearMath/btMatrixX.h" | #include "LinearMath/btMatrixX.h" | ||||
| #include "BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h" | #include "BulletDynamics/MLCPSolvers/btMLCPSolverInterface.h" | ||||
| class btMLCPSolver : public btSequentialImpulseConstraintSolver | class btMLCPSolver : public btSequentialImpulseConstraintSolver | ||||
| { | { | ||||
| protected: | protected: | ||||
| btMatrixXu m_A; | btMatrixXu m_A; | ||||
| btVectorXu m_b; | btVectorXu m_b; | ||||
| btVectorXu m_x; | btVectorXu m_x; | ||||
| btVectorXu m_lo; | btVectorXu m_lo; | ||||
| btVectorXu m_hi; | btVectorXu m_hi; | ||||
| ///when using 'split impulse' we solve two separate (M)LCPs | ///when using 'split impulse' we solve two separate (M)LCPs | ||||
| btVectorXu m_bSplit; | btVectorXu m_bSplit; | ||||
| btVectorXu m_xSplit; | btVectorXu m_xSplit; | ||||
| btVectorXu m_bSplit1; | btVectorXu m_bSplit1; | ||||
| btVectorXu m_xSplit2; | btVectorXu m_xSplit2; | ||||
| btAlignedObjectArray<int> m_limitDependencies; | btAlignedObjectArray<int> m_limitDependencies; | ||||
| btAlignedObjectArray<btSolverConstraint*> m_allConstraintPtrArray; | btAlignedObjectArray<btSolverConstraint*> m_allConstraintPtrArray; | ||||
| btMLCPSolverInterface* m_solver; | btMLCPSolverInterface* m_solver; | ||||
| int m_fallback; | int m_fallback; | ||||
| btScalar m_cfm; | |||||
| /// The following scratch variables are not stateful -- contents are cleared prior to each use. | |||||
| /// They are only cached here to avoid extra memory allocations and deallocations and to ensure | |||||
| /// that multiple instances of the solver can be run in parallel. | |||||
| btMatrixXu m_scratchJ3; | |||||
| btMatrixXu m_scratchJInvM3; | |||||
| btAlignedObjectArray<int> m_scratchOfs; | |||||
| btMatrixXu m_scratchMInv; | |||||
| btMatrixXu m_scratchJ; | |||||
| btMatrixXu m_scratchJTranspose; | |||||
| btMatrixXu m_scratchTmp; | |||||
| 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 void createMLCP(const btContactSolverInfo& infoGlobal); | virtual void createMLCP(const btContactSolverInfo& infoGlobal); | ||||
| virtual void createMLCPFast(const btContactSolverInfo& infoGlobal); | virtual void createMLCPFast(const btContactSolverInfo& infoGlobal); | ||||
| //return true is it solves the problem successfully | //return true is it solves the problem successfully | ||||
| virtual bool solveMLCP(const btContactSolverInfo& infoGlobal); | virtual bool solveMLCP(const btContactSolverInfo& infoGlobal); | ||||
| public: | public: | ||||
| btMLCPSolver( btMLCPSolverInterface* solver); | btMLCPSolver(btMLCPSolverInterface* solver); | ||||
| virtual ~btMLCPSolver(); | virtual ~btMLCPSolver(); | ||||
| void setMLCPSolver(btMLCPSolverInterface* solver) | void setMLCPSolver(btMLCPSolverInterface* solver) | ||||
| { | { | ||||
| m_solver = solver; | m_solver = solver; | ||||
| } | } | ||||
| int getNumFallbacks() const | int getNumFallbacks() const | ||||
| { | { | ||||
| return m_fallback; | return m_fallback; | ||||
| } | } | ||||
| void setNumFallbacks(int num) | void setNumFallbacks(int num) | ||||
| { | { | ||||
| m_fallback = num; | m_fallback = num; | ||||
| } | } | ||||
| btScalar getCfm() const | |||||
| { | |||||
| return m_cfm; | |||||
| } | |||||
| void setCfm(btScalar cfm) | |||||
| { | |||||
| m_cfm = cfm; | |||||
| } | |||||
| virtual btConstraintSolverType getSolverType() const | virtual btConstraintSolverType getSolverType() const | ||||
| { | { | ||||
| return BT_MLCP_SOLVER; | return BT_MLCP_SOLVER; | ||||
| } | } | ||||
| }; | }; | ||||
| #endif //BT_MLCP_SOLVER_H | #endif //BT_MLCP_SOLVER_H | ||||