added vehicle simulation
This commit is contained in:
@@ -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)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user