Changeset 7983 for code/branches/kicklib/src/external/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h
- Timestamp:
- Feb 27, 2011, 7:43:24 AM (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
code/branches/kicklib/src/external/bullet/BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h
r5781 r7983 22 22 #include "btSolverBody.h" 23 23 #include "btSolverConstraint.h" 24 25 24 #include "btTypedConstraint.h" 25 #include "BulletCollision/NarrowPhaseCollision/btManifoldPoint.h" 26 26 27 27 ///The btSequentialImpulseConstraintSolver is a fast SIMD implementation of the Projected Gauss Seidel (iterative LCP) method. … … 30 30 protected: 31 31 32 btAlignedObjectArray<btSolverBody> m_tmpSolverBodyPool;33 32 btConstraintArray m_tmpSolverContactConstraintPool; 34 33 btConstraintArray m_tmpSolverNonContactConstraintPool; … … 36 35 btAlignedObjectArray<int> m_orderTmpConstraintPool; 37 36 btAlignedObjectArray<int> m_orderFrictionConstraintPool; 37 btAlignedObjectArray<btTypedConstraint::btConstraintInfo1> m_tmpConstraintSizesPool; 38 38 39 btSolverConstraint& addFrictionConstraint(const btVector3& normalAxis,int solverBodyIdA,int solverBodyIdB,int frictionIndex,btManifoldPoint& cp,const btVector3& rel_pos1,const btVector3& rel_pos2,btCollisionObject* colObj0,btCollisionObject* colObj1, btScalar relaxation); 39 void setupFrictionConstraint( btSolverConstraint& solverConstraint, const btVector3& normalAxis,btRigidBody* solverBodyA,btRigidBody* solverBodyIdB, 40 btManifoldPoint& cp,const btVector3& rel_pos1,const btVector3& rel_pos2, 41 btCollisionObject* colObj0,btCollisionObject* colObj1, btScalar relaxation, 42 btScalar desiredVelocity=0., btScalar cfmSlip=0.); 43 44 btSolverConstraint& addFrictionConstraint(const btVector3& normalAxis,btRigidBody* solverBodyA,btRigidBody* solverBodyB,int frictionIndex,btManifoldPoint& cp,const btVector3& rel_pos1,const btVector3& rel_pos2,btCollisionObject* colObj0,btCollisionObject* colObj1, btScalar relaxation, btScalar desiredVelocity=0., btScalar cfmSlip=0.); 40 45 46 void setupContactConstraint(btSolverConstraint& solverConstraint, btCollisionObject* colObj0, btCollisionObject* colObj1, btManifoldPoint& cp, 47 const btContactSolverInfo& infoGlobal, btVector3& vel, btScalar& rel_vel, btScalar& relaxation, 48 btVector3& rel_pos1, btVector3& rel_pos2); 49 50 void setFrictionConstraintImpulse( btSolverConstraint& solverConstraint, btRigidBody* rb0, btRigidBody* rb1, 51 btManifoldPoint& cp, const btContactSolverInfo& infoGlobal); 52 41 53 ///m_btSeed2 is used for re-arranging the constraint rows. improves convergence/quality of friction 42 54 unsigned long m_btSeed2; 43 55 44 void initSolverBody(btSolverBody* solverBody, btCollisionObject* collisionObject);56 // void initSolverBody(btSolverBody* solverBody, btCollisionObject* collisionObject); 45 57 btScalar restitutionCurve(btScalar rel_vel, btScalar restitution); 46 58 47 59 void convertContact(btPersistentManifold* manifold,const btContactSolverInfo& infoGlobal); 48 60 61 62 void resolveSplitPenetrationSIMD( 63 btRigidBody& body1, 64 btRigidBody& body2, 65 const btSolverConstraint& contactConstraint); 66 49 67 void resolveSplitPenetrationImpulseCacheFriendly( 50 btSolverBody& body1, 51 btSolverBody& body2, 52 const btSolverConstraint& contactConstraint, 53 const btContactSolverInfo& solverInfo); 68 btRigidBody& body1, 69 btRigidBody& body2, 70 const btSolverConstraint& contactConstraint); 54 71 55 72 //internal method 56 73 int getOrInitSolverBody(btCollisionObject& body); 57 74 58 void resolveSingleConstraintRowGeneric(bt SolverBody& body1,btSolverBody& body2,const btSolverConstraint& contactConstraint);75 void resolveSingleConstraintRowGeneric(btRigidBody& body1,btRigidBody& body2,const btSolverConstraint& contactConstraint); 59 76 60 void resolveSingleConstraintRowGenericSIMD(bt SolverBody& body1,btSolverBody& body2,const btSolverConstraint& contactConstraint);77 void resolveSingleConstraintRowGenericSIMD(btRigidBody& body1,btRigidBody& body2,const btSolverConstraint& contactConstraint); 61 78 62 void resolveSingleConstraintRowLowerLimit(bt SolverBody& body1,btSolverBody& body2,const btSolverConstraint& contactConstraint);79 void resolveSingleConstraintRowLowerLimit(btRigidBody& body1,btRigidBody& body2,const btSolverConstraint& contactConstraint); 63 80 64 void resolveSingleConstraintRowLowerLimitSIMD(bt SolverBody& body1,btSolverBody& body2,const btSolverConstraint& contactConstraint);81 void resolveSingleConstraintRowLowerLimitSIMD(btRigidBody& body1,btRigidBody& body2,const btSolverConstraint& contactConstraint); 65 82 83 protected: 84 static btRigidBody& getFixedBody(); 85 86 virtual void solveGroupCacheFriendlySplitImpulseIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc); 87 virtual btScalar solveGroupCacheFriendlyFinish(btCollisionObject** bodies ,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc); 88 btScalar solveSingleIteration(int iteration, btCollisionObject** bodies ,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc); 89 90 virtual btScalar solveGroupCacheFriendlySetup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc); 91 virtual btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc); 92 93 66 94 public: 67 95 … … 72 100 virtual btScalar solveGroup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifold,int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& info, btIDebugDraw* debugDrawer, btStackAlloc* stackAlloc,btDispatcher* dispatcher); 73 101 74 btScalar solveGroupCacheFriendlySetup(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc);75 btScalar solveGroupCacheFriendlyIterations(btCollisionObject** bodies,int numBodies,btPersistentManifold** manifoldPtr, int numManifolds,btTypedConstraint** constraints,int numConstraints,const btContactSolverInfo& infoGlobal,btIDebugDraw* debugDrawer,btStackAlloc* stackAlloc);76 102 103 77 104 ///clear internal cached data and reset random seed 78 105 virtual void reset();
Note: See TracChangeset
for help on using the changeset viewer.