20 m_broadphase = std::make_unique<btDbvtBroadphase>();
21 m_collisionConfig = std::make_unique<btDefaultCollisionConfiguration>();
22 m_dispatcher = std::make_unique<btCollisionDispatcher>(m_collisionConfig.get());
23 m_solver = std::make_unique<btSequentialImpulseConstraintSolver>();
24 m_world = std::make_unique<btDiscreteDynamicsWorld>(
25 m_dispatcher.get(), m_broadphase.get(), m_solver.get(), m_collisionConfig.get()
28 m_world->setGravity(btVector3(0, -9.81f, 0));
33 const btScalar fixedTimeStep = 1.0f / 60.0f;
34 const int maxSubsteps = 4;
35 m_world->stepSimulation(deltaTime, maxSubsteps, fixedTimeStep);
38 auto dispatcher = m_world->getDispatcher();
39 const auto numManifolds = dispatcher->getNumManifolds();
40 for (
int i = 0; i < numManifolds; ++i)
42 auto manifold = dispatcher->getManifoldByIndexInternal(i);
48 auto bodyA =
reinterpret_cast<CollisionObject*
>(manifold->getBody0()->getUserPointer());
49 auto bodyB =
reinterpret_cast<CollisionObject*
>(manifold->getBody1()->getUserPointer());
56 const auto numContacts = manifold->getNumContacts();
57 for (
int j = 0; j < numContacts; ++j)
59 const auto& point = manifold->getContactPoint(j);
61 point.m_positionWorldOnB.x(),
62 point.m_positionWorldOnB.y(),
63 point.m_positionWorldOnB.z());
65 point.m_normalWorldOnB.x(),
66 point.m_normalWorldOnB.y(),
67 point.m_normalWorldOnB.z());
69 bodyA->DispatchContactEvent(bodyB, pos, norm);
70 bodyB->DispatchContactEvent(bodyA, pos, norm);
void SetAddedToWorld(bool added)