fixes in Bullet stuff, roll influence for raycast vehicles was broken,

enable the setPhysicsTicRate for BGE Python
This commit is contained in:
Erwin Coumans
2011-03-29 18:44:18 +00:00
parent 973ce364a4
commit 952aa9804f
3 changed files with 11 additions and 6 deletions

View File

@@ -254,20 +254,21 @@ void btGjkPairDetector::getClosestPointsNonVirtual(const ClosestPointInput& inpu
} }
#endif // #endif //
m_cachedSeparatingAxis = newCachedSeparatingAxis;
//redundant m_simplexSolver->compute_points(pointOnA, pointOnB); //redundant m_simplexSolver->compute_points(pointOnA, pointOnB);
//are we getting any closer ? //are we getting any closer ?
if (previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance) if (previousSquaredDistance - squaredDistance <= SIMD_EPSILON * previousSquaredDistance)
{ {
m_simplexSolver->backup_closest(m_cachedSeparatingAxis); // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
checkSimplex = true; checkSimplex = true;
m_degenerateSimplex = 12; m_degenerateSimplex = 12;
break; break;
} }
m_cachedSeparatingAxis = newCachedSeparatingAxis;
//degeneracy, this is typically due to invalid/uninitialized worldtransforms for a btCollisionObject //degeneracy, this is typically due to invalid/uninitialized worldtransforms for a btCollisionObject
if (m_curIter++ > gGjkMaxIter) if (m_curIter++ > gGjkMaxIter)
{ {
@@ -294,7 +295,7 @@ void btGjkPairDetector::getClosestPointsNonVirtual(const ClosestPointInput& inpu
if (!check) if (!check)
{ {
//do we need this backup_closest here ? //do we need this backup_closest here ?
m_simplexSolver->backup_closest(m_cachedSeparatingAxis); // m_simplexSolver->backup_closest(m_cachedSeparatingAxis);
m_degenerateSimplex = 13; m_degenerateSimplex = 13;
break; break;
} }
@@ -303,7 +304,7 @@ void btGjkPairDetector::getClosestPointsNonVirtual(const ClosestPointInput& inpu
if (checkSimplex) if (checkSimplex)
{ {
m_simplexSolver->compute_points(pointOnA, pointOnB); m_simplexSolver->compute_points(pointOnA, pointOnB);
normalInB = pointOnA-pointOnB; normalInB = m_cachedSeparatingAxis;
btScalar lenSqr =m_cachedSeparatingAxis.length2(); btScalar lenSqr =m_cachedSeparatingAxis.length2();
//valid normal //valid normal

View File

@@ -698,7 +698,7 @@ void btRaycastVehicle::updateFriction(btScalar timeStep)
btVector3 sideImp = m_axle[wheel] * m_sideImpulse[wheel]; btVector3 sideImp = m_axle[wheel] * m_sideImpulse[wheel];
#if defined ROLLING_INFLUENCE_FIX // fix. It only worked if car's up was along Y - VT. #if defined ROLLING_INFLUENCE_FIX // fix. It only worked if car's up was along Y - VT.
btVector3 vChassisWorldUp = getRigidBody()->getCenterOfMassTransform().getBasis().getColumn(1); btVector3 vChassisWorldUp = getRigidBody()->getCenterOfMassTransform().getBasis().getColumn(m_indexUpAxis);
rel_pos -= vChassisWorldUp * (vChassisWorldUp.dot(rel_pos) * (1.f-wheelInfo.m_rollInfluence)); rel_pos -= vChassisWorldUp * (vChassisWorldUp.dot(rel_pos) * (1.f-wheelInfo.m_rollInfluence));
#else #else
rel_pos[m_indexUpAxis] *= wheelInfo.m_rollInfluence; rel_pos[m_indexUpAxis] *= wheelInfo.m_rollInfluence;

View File

@@ -125,7 +125,11 @@ protected:
virtual void debugDrawWorld(); virtual void debugDrawWorld();
// virtual bool proceedDeltaTimeOneStep(float timeStep); // virtual bool proceedDeltaTimeOneStep(float timeStep);
virtual void setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep){}; virtual void setFixedTimeStep(bool useFixedTimeStep,float fixedTimeStep)
{
//based on DEFAULT_PHYSICS_TIC_RATE of 60 hertz
setNumTimeSubSteps(fixedTimeStep/60.f);
}
//returns 0.f if no fixed timestep is used //returns 0.f if no fixed timestep is used
virtual float getFixedTimeStep(){ return 0.f;}; virtual float getFixedTimeStep(){ return 0.f;};