Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorErwin Coumans <blender@erwincoumans.com>2006-05-11 04:13:42 +0400
committerErwin Coumans <blender@erwincoumans.com>2006-05-11 04:13:42 +0400
commit93c47e107198c91ad28d72acc2c6659d862e496e (patch)
treeef9f2dffc4573e339a0102a333b9123229055fa3 /source/gameengine/Physics
parent2358e85b6d250b3e4597ec8bd23890bf95f41ebb (diff)
- Added support for kinematic objects (interaction between rigidbodies), deriving linear/angular velocity from previous transform/current transform and deltatime.
- Made another attempt to migrate from Sumo to Bullet: import of older files automatically switch to Bullet, but you can override it, and save the file in 2.42 version. then it stays Sumo physics.
Diffstat (limited to 'source/gameengine/Physics')
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.cpp4
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsController.h11
-rw-r--r--source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp22
3 files changed, 30 insertions, 7 deletions
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
index 79b311bd691..b8ce09729c2 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.cpp
@@ -31,7 +31,7 @@ class BP_Proxy;
float gDeactivationTime = 2.f;
bool gDisableDeactivation = false;
-float gLinearSleepingTreshold = 0.8f;
+float gLinearSleepingTreshold = 0.4f;
float gAngularSleepingTreshold = 1.0f;
#include "Dynamics/MassProps.h"
@@ -136,7 +136,7 @@ bool CcdPhysicsController::SynchronizeMotionStates(float time)
m_MotionState->getWorldOrientation(worldquat[0],worldquat[1],worldquat[2],worldquat[3]);
SimdTransform oldTrans = m_body->getCenterOfMassTransform();
SimdTransform newTrans(worldquat,worldPos);
-
+
m_body->setCenterOfMassTransform(newTrans);
//need to keep track of previous position for friction effects...
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsController.h b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
index f1933d55137..646b21f285e 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsController.h
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsController.h
@@ -171,6 +171,17 @@ class CcdPhysicsController : public PHY_IPhysicsController
void SetAabb(const SimdVector3& aabbMin,const SimdVector3& aabbMax);
+ class PHY_IMotionState* GetMotionState()
+ {
+ return m_MotionState;
+ }
+
+ const class PHY_IMotionState* GetMotionState() const
+ {
+ return m_MotionState;
+ }
+
+
};
#endif //BULLET2_PHYSICSCONTROLLER_H
diff --git a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
index 9583839a7ae..7afd7bf8fc5 100644
--- a/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
+++ b/source/gameengine/Physics/Bullet/CcdPhysicsEnvironment.cpp
@@ -586,6 +586,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
m_scalingPropagated = true;
}
+
#ifdef USE_QUICKPROF
Profiler::endBlock("SyncMotionStates");
@@ -605,9 +606,12 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
RigidBody* body = ctrl->GetRigidBody();
if (body->GetActivationState() != ISLAND_SLEEPING)
{
- body->applyForces( timeStep);
- body->integrateVelocities( timeStep);
- body->predictIntegratedTransform(timeStep,body->m_nextPredictedWorldTransform);
+ if (!body->IsStatic())
+ {
+ body->applyForces( timeStep);
+ body->integrateVelocities( timeStep);
+ body->predictIntegratedTransform(timeStep,body->m_interpolationWorldTransform);
+ }
}
}
@@ -807,8 +811,15 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
if (body->GetActivationState() != ISLAND_SLEEPING)
{
- body->predictIntegratedTransform(timeStep* toi, predictedTrans);
- body->proceedToTransform( predictedTrans);
+ if (body->IsStatic())
+ {
+ //to calculate velocities next frame
+ body->saveKinematicState(timeStep);
+ } else
+ {
+ body->predictIntegratedTransform(timeStep* toi, predictedTrans);
+ body->proceedToTransform( predictedTrans);
+ }
}
}
@@ -893,6 +904,7 @@ bool CcdPhysicsEnvironment::proceedDeltaTimeOneStep(float timeStep)
}
#endif //NEW_BULLET_VEHICLE_SUPPORT
}
+
return true;
}