1 diff -urN bullet.orig/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp bullet.new/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp
2 --- bullet.orig/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp 2014-01-10 15:49:31.000000000 -0600
3 +++ bullet.new/src/BulletCollision/NarrowPhaseCollision/btGjkPairDetector.cpp 2015-03-26 20:16:59.766935213 -0500
7 m_catchDegeneracies(1),
8 -m_fixContactNormalDirection(1)
9 +m_fixContactNormalDirection(0)
12 btGjkPairDetector::btGjkPairDetector(const btConvexShape* objectA,const btConvexShape* objectB,int shapeTypeA,int shapeTypeB,btScalar marginA, btScalar marginB, btSimplexSolverInterface* simplexSolver,btConvexPenetrationDepthSolver* penetrationDepthSolver)
14 m_ignoreMargin(false),
16 m_catchDegeneracies(1),
17 -m_fixContactNormalDirection(1)
18 +m_fixContactNormalDirection(0)
22 diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp
23 --- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2015-03-26 13:15:36.992897379 -0500
24 +++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.cpp 2015-12-22 17:59:06.345343465 -0600
28 m_walkDirection.setValue(0,0,0);
29 + m_normalizedDirection.setValue(0,0,0);
30 m_useGhostObjectSweepTest = true;
31 m_ghostObject = ghostObject;
32 m_stepHeight = stepHeight;
35 collisionWorld->getDispatcher()->dispatchAllCollisionPairs(m_ghostObject->getOverlappingPairCache(), collisionWorld->getDispatchInfo(), collisionWorld->getDispatcher());
37 - m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
38 + //m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
40 btScalar maxPen = btScalar(0.0);
41 for (int i = 0; i < m_ghostObject->getOverlappingPairCache()->getNumOverlappingPairs(); i++)
43 //manifold->clearManifold();
46 - btTransform newTrans = m_ghostObject->getWorldTransform();
47 - newTrans.setOrigin(m_currentPosition);
48 - m_ghostObject->setWorldTransform(newTrans);
49 -// printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
50 + if (penetration == true)
52 + btTransform newTrans = m_ghostObject->getWorldTransform();
53 + newTrans.setOrigin(m_currentPosition);
54 + m_ghostObject->setWorldTransform(newTrans);
55 + //printf("m_touchingNormal = %f,%f,%f\n",m_touchingNormal[0],m_touchingNormal[1],m_touchingNormal[2]);
61 btScalar distance2 = (m_currentPosition-m_targetPosition).length2();
62 // printf("distance2=%f\n",distance2);
64 - if (m_touchingContact)
65 + /*if (m_touchingContact)
67 if (m_normalizedDirection.dot(m_touchingNormal) > btScalar(0.0))
69 //interferes with step movement
70 - //updateTargetPositionBasedOnCollision (m_touchingNormal);
71 + updateTargetPositionBasedOnCollision (m_touchingNormal);
78 + doPenetrationRecovery(collisionWorld);
80 while (fraction > btScalar(0.01) && maxIter-- > 0)
82 start.setOrigin (m_currentPosition);
84 void btKinematicCharacterController::preStep ( btCollisionWorld* collisionWorld)
87 - int numPenetrationLoops = 0;
88 - m_touchingContact = false;
89 - while (recoverFromPenetration (collisionWorld))
91 - numPenetrationLoops++;
92 - m_touchingContact = true;
93 - if (numPenetrationLoops > 4)
95 - //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
100 m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
101 m_targetPosition = m_currentPosition;
102 // printf("m_targetPosition=%f,%f,%f\n",m_targetPosition[0],m_targetPosition[1],m_targetPosition[2]);
110 m_interpolateUp = value;
113 +void btKinematicCharacterController::doPenetrationRecovery(btCollisionWorld* collisionWorld)
115 + int numPenetrationLoops = 0;
116 + m_touchingContact = false;
118 + while (recoverFromPenetration (collisionWorld))
120 + numPenetrationLoops++;
121 + m_touchingContact = true;
122 + if (numPenetrationLoops > 4)
124 + //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
129 diff -urN bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h
130 --- bullet.orig/src/BulletDynamics/Character/btKinematicCharacterController.h 2015-03-26 13:15:36.992897379 -0500
131 +++ bullet.new/src/BulletDynamics/Character/btKinematicCharacterController.h 2015-03-26 01:23:54.895928312 -0500
133 void updateTargetPositionBasedOnCollision (const btVector3& hit_normal, btScalar tangentMag = btScalar(0.0), btScalar normalMag = btScalar(1.0));
134 void stepForwardAndStrafe (btCollisionWorld* collisionWorld, const btVector3& walkMove);
135 void stepDown (btCollisionWorld* collisionWorld, btScalar dt);
136 + void doPenetrationRecovery(btCollisionWorld* collisionWorld);
139 BT_DECLARE_ALIGNED_ALLOCATOR();