void Solver::Solve(double dt) { for (int i = 0; i < ray.size(); i++) ray[i]->setAABB(); if (applyg) applyg(body); else applyG(); BPT.Start(); bp.sort(); BPT.End(); NPT.Start(); checkCol(); NPT.End(); applyForces(dt); SLT.Start(); solveVelocities(dt); SLT.End(); MVT.Start(); solvePositions(dt); MVT.End(); clearForces(); }
void PhysicsWorld::solve() { if (m_narrowphase->contacts().empty()) { return; } /** * Warm starting */ for (auto & contact : m_narrowphase->contacts()) { warmStart(*contact); } /** * Iterative solving */ // std::cout << "Solve velocities:" << std::endl; for (auto i = 0; i < m_numVelocityIterations; i++) { for (auto & contact : m_narrowphase->contacts()) { solveContactVelocities(*contact); } } std::cout << "Solve positions:" << std::endl; for (auto i = 0; i < m_numPositionIterations; i++) { for (auto & contact : m_narrowphase->contacts()) { solvePositions(*contact); } } }