OSDN Git Service

Fix walls and floors
[skyscrapersim/skyscraper.git] / bullet-changes.patch
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
4 @@ -51,7 +51,7 @@
5  m_ignoreMargin(false),
6  m_lastUsedMethod(-1),
7  m_catchDegeneracies(1),
8 -m_fixContactNormalDirection(1)
9 +m_fixContactNormalDirection(0)
10  {
11  }
12  btGjkPairDetector::btGjkPairDetector(const btConvexShape* objectA,const btConvexShape* objectB,int shapeTypeA,int shapeTypeB,btScalar marginA, btScalar marginB, btSimplexSolverInterface* simplexSolver,btConvexPenetrationDepthSolver*       penetrationDepthSolver)
13 @@ -67,7 +67,7 @@
14  m_ignoreMargin(false),
15  m_lastUsedMethod(-1),
16  m_catchDegeneracies(1),
17 -m_fixContactNormalDirection(1)
18 +m_fixContactNormalDirection(0)
19  {
20  }
21  
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
25 @@ -136,6 +136,7 @@
26         m_upAxis = upAxis;
27         m_addedMargin = 0.02;
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;
33 @@ -187,7 +188,7 @@
34  
35         collisionWorld->getDispatcher()->dispatchAllCollisionPairs(m_ghostObject->getOverlappingPairCache(), collisionWorld->getDispatchInfo(), collisionWorld->getDispatcher());
36  
37 -       m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
38 +       //m_currentPosition = m_ghostObject->getWorldTransform().getOrigin();
39         
40         btScalar maxPen = btScalar(0.0);
41         for (int i = 0; i < m_ghostObject->getOverlappingPairCache()->getNumOverlappingPairs(); i++)
42 @@ -234,10 +235,13 @@
43                         //manifold->clearManifold();
44                 }
45         }
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)
51 +       {
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]);
56 +       }
57         return penetration;
58  }
59  
60 @@ -338,17 +342,19 @@
61         btScalar distance2 = (m_currentPosition-m_targetPosition).length2();
62  //     printf("distance2=%f\n",distance2);
63  
64 -       if (m_touchingContact)
65 +       /*if (m_touchingContact)
66         {
67                 if (m_normalizedDirection.dot(m_touchingNormal) > btScalar(0.0))
68                 {
69                         //interferes with step movement
70 -                       //updateTargetPositionBasedOnCollision (m_touchingNormal);
71 +                       updateTargetPositionBasedOnCollision (m_touchingNormal);
72                 }
73 -       }
74 +       }*/
75  
76         int maxIter = 10;
77  
78 +       doPenetrationRecovery(collisionWorld);
79 +
80         while (fraction > btScalar(0.01) && maxIter-- > 0)
81         {
82                 start.setOrigin (m_currentPosition);
83 @@ -607,24 +613,9 @@
84  void btKinematicCharacterController::preStep (  btCollisionWorld* collisionWorld)
85  {
86         
87 -       int numPenetrationLoops = 0;
88 -       m_touchingContact = false;
89 -       while (recoverFromPenetration (collisionWorld))
90 -       {
91 -               numPenetrationLoops++;
92 -               m_touchingContact = true;
93 -               if (numPenetrationLoops > 4)
94 -               {
95 -                       //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
96 -                       break;
97 -               }
98 -       }
99 -
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]);
103 -
104 -       
105  }
106  
107  #include <stdio.h>
108 @@ -768,3 +759,20 @@
109  {
110         m_interpolateUp = value;
111  }
112 +
113 +void btKinematicCharacterController::doPenetrationRecovery(btCollisionWorld* collisionWorld)
114 +{
115 +       int numPenetrationLoops = 0;
116 +       m_touchingContact = false;
117 +
118 +       while (recoverFromPenetration (collisionWorld))
119 +       {
120 +               numPenetrationLoops++;
121 +               m_touchingContact = true;
122 +               if (numPenetrationLoops > 4)
123 +               {
124 +                       //printf("character could not recover from penetration = %d\n", numPenetrationLoops);
125 +                       break;
126 +               }
127 +       }
128 +}
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
132 @@ -94,6 +94,7 @@
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);
137  public:
138  
139         BT_DECLARE_ALIGNED_ALLOCATOR();