diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-12-27 15:05:49 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2013-12-27 15:05:49 +0400 |
commit | 76b562237f31a804cd2eba9e3af6effa54f31b5b (patch) | |
tree | d789e373995ad0ab4ca0fb5668937c5b7814bb2d /extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp | |
parent | 03e388127034c35c82ed0f84b2239125111db5a4 (diff) | |
parent | d09a8ea9e7a8ad208326b99a0631e9efc7119fbd (diff) |
Merge branch 'master' into soc-2013-depsgraph_mtsoc-2013-depsgraph_mt
Conflicts:
source/blender/blenkernel/intern/constraint.c
source/blender/blenkernel/intern/depsgraph.c
source/blender/blenkernel/intern/object.c
source/blender/blenkernel/intern/scene.c
source/blender/blenkernel/intern/shrinkwrap.c
source/blender/collada/AnimationExporter.cpp
source/blender/editors/space_image/image_ops.c
source/blender/editors/space_view3d/view3d_view.c
source/blender/makesrna/intern/rna_scene.c
source/blender/modifiers/intern/MOD_util.c
source/blender/render/intern/source/pipeline.c
Diffstat (limited to 'extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp')
-rw-r--r-- | extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp | 28 |
1 files changed, 17 insertions, 11 deletions
diff --git a/extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp b/extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp index 8888d3961f5..0635b958bed 100644 --- a/extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp +++ b/extern/bullet2/src/BulletDynamics/MLCPSolvers/btMLCPSolver.cpp @@ -19,9 +19,11 @@ subject to the following restrictions: #include "LinearMath/btQuickprof.h" #include "btSolveProjectedGaussSeidel.h" + btMLCPSolver::btMLCPSolver( btMLCPSolverInterface* solver) :m_solver(solver), -m_fallback(0) +m_fallback(0), +m_cfm(0.000001)//0.0000001 { } @@ -160,13 +162,17 @@ void btMLCPSolver::createMLCPFast(const btContactSolverInfo& infoGlobal) BT_PROFILE("init b (rhs)"); m_b.resize(numConstraintRows); m_bSplit.resize(numConstraintRows); - //m_b.setZero(); + m_b.setZero(); + m_bSplit.setZero(); for (int i=0;i<numConstraintRows ;i++) { - if (m_allConstraintArray[i].m_jacDiagABInv) + btScalar jacDiag = m_allConstraintArray[i].m_jacDiagABInv; + if (!btFuzzyZero(jacDiag)) { - m_b[i]=m_allConstraintArray[i].m_rhs/m_allConstraintArray[i].m_jacDiagABInv; - m_bSplit[i] = m_allConstraintArray[i].m_rhsPenetration/m_allConstraintArray[i].m_jacDiagABInv; + btScalar rhs = m_allConstraintArray[i].m_rhs; + btScalar rhsPenetration = m_allConstraintArray[i].m_rhsPenetration; + m_b[i]=rhs/jacDiag; + m_bSplit[i] = rhsPenetration/jacDiag; } } @@ -425,14 +431,12 @@ void btMLCPSolver::createMLCPFast(const btContactSolverInfo& infoGlobal) } } - ///todo: use proper cfm values from the constraints (getInfo2) if (1) { // add cfm to the diagonal of m_A for ( int i=0; i<m_A.rows(); ++i) { - float cfm = 0.00001f; - m_A.setElem(i,i,m_A(i,i)+ cfm / infoGlobal.m_timeStep); + m_A.setElem(i,i,m_A(i,i)+ m_cfm / infoGlobal.m_timeStep); } } @@ -473,6 +477,9 @@ void btMLCPSolver::createMLCP(const btContactSolverInfo& infoGlobal) if (infoGlobal.m_splitImpulse) m_bSplit.resize(numConstraintRows); + m_bSplit.setZero(); + m_b.setZero(); + for (int i=0;i<numConstraintRows ;i++) { if (m_allConstraintArray[i].m_jacDiagABInv) @@ -554,12 +561,10 @@ void btMLCPSolver::createMLCP(const btContactSolverInfo& infoGlobal) if (1) { - ///todo: use proper cfm values from the constraints (getInfo2) // add cfm to the diagonal of m_A for ( int i=0; i<m_A.rows(); ++i) { - float cfm = 0.0001f; - m_A.setElem(i,i,m_A(i,i)+ cfm / infoGlobal.m_timeStep); + m_A.setElem(i,i,m_A(i,i)+ m_cfm / infoGlobal.m_timeStep); } } @@ -618,6 +623,7 @@ btScalar btMLCPSolver::solveGroupCacheFriendlyIterations(btCollisionObject** bod } else { + // printf("m_fallback = %d\n",m_fallback); m_fallback++; btSequentialImpulseConstraintSolver::solveGroupCacheFriendlyIterations(bodies ,numBodies,manifoldPtr, numManifolds,constraints,numConstraints,infoGlobal,debugDrawer); } |