added vehicle simulation

This commit is contained in:
ejcoumans
2006-09-27 00:08:24 +00:00
parent 2a602aefa1
commit a54f928b60
2 changed files with 50 additions and 2 deletions

View File

@@ -1,14 +1,23 @@
#include "btDiscreteDynamicsWorld.h" #include "btDiscreteDynamicsWorld.h"
//collision detection
#include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h" #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
#include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h" #include "BulletCollision/BroadphaseCollision/btSimpleBroadphase.h"
#include "BulletCollision/CollisionShapes/btCollisionShape.h" #include "BulletCollision/CollisionShapes/btCollisionShape.h"
#include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h" #include "BulletCollision/CollisionDispatch/btSimulationIslandManager.h"
//rigidbody & constraints
#include "BulletDynamics/Dynamics/btRigidBody.h" #include "BulletDynamics/Dynamics/btRigidBody.h"
#include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h" #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
#include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h" #include "BulletDynamics/ConstraintSolver/btContactSolverInfo.h"
#include "BulletDynamics/ConstraintSolver/btTypedConstraint.h" #include "BulletDynamics/ConstraintSolver/btTypedConstraint.h"
//vehicle
#include "BulletDynamics/Vehicle/btRaycastVehicle.h"
#include "BulletDynamics/Vehicle/btVehicleRaycaster.h"
#include "BulletDynamics/Vehicle/btWheelInfo.h"
#include <algorithm> #include <algorithm>
btDiscreteDynamicsWorld::btDiscreteDynamicsWorld() btDiscreteDynamicsWorld::btDiscreteDynamicsWorld()
@@ -41,6 +50,9 @@ btDiscreteDynamicsWorld::~btDiscreteDynamicsWorld()
void btDiscreteDynamicsWorld::stepSimulation(float timeStep) void btDiscreteDynamicsWorld::stepSimulation(float timeStep)
{ {
///update aabbs information
updateAabbs();
///apply gravity, predict motion ///apply gravity, predict motion
predictUnconstraintMotion(timeStep); predictUnconstraintMotion(timeStep);
@@ -55,17 +67,30 @@ void btDiscreteDynamicsWorld::stepSimulation(float timeStep)
///solve non-contact constraints ///solve non-contact constraints
solveNoncontactConstraints(infoGlobal); solveNoncontactConstraints(infoGlobal);
///solve contact constraints
solveContactConstraints(infoGlobal); solveContactConstraints(infoGlobal);
//CallbackTriggers(); ///update vehicle simulation
updateVehicles(timeStep);
///CallbackTriggers();
///integrate transforms ///integrate transforms
integrateTransforms(timeStep); integrateTransforms(timeStep);
updateActivationState( timeStep ); updateActivationState( timeStep );
updateAabbs();
}
void btDiscreteDynamicsWorld::updateVehicles(float timeStep)
{
for (int i=0;i<m_vehicles.size();i++)
{
RaycastVehicle* vehicle = m_vehicles[i];
vehicle->UpdateVehicle( timeStep);
}
} }
void btDiscreteDynamicsWorld::updateActivationState(float timeStep) void btDiscreteDynamicsWorld::updateActivationState(float timeStep)
@@ -106,6 +131,21 @@ void btDiscreteDynamicsWorld::removeConstraint(TypedConstraint* constraint)
} }
} }
void btDiscreteDynamicsWorld::addVehicle(RaycastVehicle* vehicle)
{
m_vehicles.push_back(vehicle);
}
void btDiscreteDynamicsWorld::removeVehicle(RaycastVehicle* vehicle)
{
std::vector<RaycastVehicle*>::iterator vit = std::find(m_vehicles.begin(),m_vehicles.end(),vehicle);
if (!(vit==m_vehicles.end()))
{
m_vehicles.erase(vit);
}
}
void btDiscreteDynamicsWorld::solveContactConstraints(ContactSolverInfo& solverInfo) void btDiscreteDynamicsWorld::solveContactConstraints(ContactSolverInfo& solverInfo)
{ {

View File

@@ -24,6 +24,7 @@ class ConstraintSolver;
class SimulationIslandManager; class SimulationIslandManager;
class TypedConstraint; class TypedConstraint;
struct ContactSolverInfo; struct ContactSolverInfo;
class RaycastVehicle;
#include <vector> #include <vector>
@@ -39,6 +40,8 @@ protected:
std::vector<TypedConstraint*> m_constraints; std::vector<TypedConstraint*> m_constraints;
std::vector<RaycastVehicle*> m_vehicles;
void predictUnconstraintMotion(float timeStep); void predictUnconstraintMotion(float timeStep);
void integrateTransforms(float timeStep); void integrateTransforms(float timeStep);
@@ -53,6 +56,7 @@ protected:
void updateActivationState(float timeStep); void updateActivationState(float timeStep);
void updateVehicles(float timeStep);
public: public:
@@ -69,6 +73,10 @@ public:
void removeConstraint(TypedConstraint* constraint); void removeConstraint(TypedConstraint* constraint);
void addVehicle(RaycastVehicle* vehicle);
void removeVehicle(RaycastVehicle* vehicle);
SimulationIslandManager* GetSimulationIslandManager() SimulationIslandManager* GetSimulationIslandManager()
{ {
return m_islandManager; return m_islandManager;