33 #include "BulletCollision/BroadphaseCollision/btBroadphaseInterface.h"
34 #include "BulletCollision/BroadphaseCollision/btDbvtBroadphase.h"
35 #include "BulletCollision/CollisionDispatch/btCollisionDispatcher.h"
36 #include "BulletCollision/CollisionDispatch/btDefaultCollisionConfiguration.h"
37 #include "BulletCollision/CollisionShapes/btBoxShape.h"
38 #include "BulletDynamics/Dynamics/btRigidBody.h"
39 #include "BulletDynamics/ConstraintSolver/btSequentialImpulseConstraintSolver.h"
40 #include "BulletSoftBody/btSoftBodyRigidBodyCollisionConfiguration.h"
41 #include "BulletSoftBody/btSoftRigidDynamicsWorld.h"
42 #include "LinearMath/btDefaultMotionState.h"
43 #include "LinearMath/btScalar.h"
44 #include "LinearMath/btTransform.h"
45 #include "LinearMath/btVector3.h"
57 btSoftBodyRigidBodyCollisionConfiguration collisionConfiguration;
58 btCollisionDispatcher dispatcher;
59 btDbvtBroadphase broadphase;
60 btSequentialImpulseConstraintSolver solver;
67 m_pDynamicsWorld(createDynamicsWorld())
70 const btVector3 gravityVector(0, -config.
gravity, 0);
71 m_pDynamicsWorld->setGravity(gravityVector);
75 btRigidBody *
const pGroundRigidBody = createGroundRigidBody();
76 m_pDynamicsWorld->addRigidBody(pGroundRigidBody);
89 const size_t nco = m_pDynamicsWorld->getNumCollisionObjects();
90 btCollisionObjectArray& oa = m_pDynamicsWorld->getCollisionObjectArray();
91 for (
int i = nco - 1; i >= 0; --i)
93 btCollisionObject *
const pCollisionObject = oa[i];
96 const btRigidBody*
const pRigidBody =
97 btRigidBody::upcast(pCollisionObject);
100 delete pRigidBody->getMotionState();
104 m_pDynamicsWorld->removeCollisionObject(pCollisionObject);
106 delete pCollisionObject;
109 assert(m_pDynamicsWorld->getNumCollisionObjects() == 0);
112 const size_t ncs = m_collisionShapes.size();
113 for (
size_t i = 0; i < ncs; ++i) {
delete m_collisionShapes[i]; }
115 delete m_pDynamicsWorld;
118 delete m_pIntermediateBuildProducts;
125 btSoftRigidDynamicsWorld* tgWorldBulletPhysicsImpl::createDynamicsWorld()
const
127 btSoftRigidDynamicsWorld *
const result =
128 new btSoftRigidDynamicsWorld(&m_pIntermediateBuildProducts->dispatcher,
129 &m_pIntermediateBuildProducts->broadphase,
130 &m_pIntermediateBuildProducts->solver,
131 &m_pIntermediateBuildProducts->collisionConfiguration);
140 btRigidBody* tgWorldBulletPhysicsImpl::createGroundRigidBody()
142 const btScalar mass = 0.0;
144 btTransform groundTransform;
145 groundTransform.setIdentity();
146 groundTransform.setOrigin(btVector3(0, -0.5, 0));
150 btDefaultMotionState*
const pMotionState =
151 new btDefaultMotionState(groundTransform);
153 const btVector3 groundDimensions(btScalar(500.0), btScalar(0.5), btScalar(500.0));
154 btBoxShape*
const pGroundShape =
new btBoxShape(groundDimensions);
158 const btVector3 localInertia(0, 0, 0);
160 btRigidBody::btRigidBodyConstructionInfo
const rbInfo(mass, pMotionState, pGroundShape, localInertia);
162 btRigidBody*
const pGroundRigidBody =
new btRigidBody(rbInfo);
164 return pGroundRigidBody;
173 const btScalar timeStep = dt;
174 const int maxSubSteps = 1;
175 const btScalar fixedTimeStep = dt;
176 m_pDynamicsWorld->stepSimulation(timeStep, maxSubSteps, fixedTimeStep);
186 m_collisionShapes.push_back(pShape);
193 bool tgWorldBulletPhysicsImpl::invariant()
const
195 return (m_pDynamicsWorld != 0);
~tgWorldBulletPhysicsImpl()
Contains the definition of class tgBulletGround.
Contains the definition of class tgWorldBulletPhysicsImpl.
tgWorldBulletPhysicsImpl(const tgWorld::Config &config, tgBulletGround *ground)
virtual btRigidBody * getGroundRigidBody() const =0
Contains the definition of class tgWorld $Id$.
virtual void step(double dt)
void addCollisionShape(btCollisionShape *pShape)