Hi, I was wanting to read the box2d source, but wanted to get a broad overview first. I'll just say what I understand so far:
Box2d has discrete & continuous collision detection. We first integrate our shapes velocity, and using a 'conservative advancement algorithm, we advance the shapes & find toi.
It then uses gjk & barycentric coordinates to find the closest point on the shapes. If theyre overlapping we use epa or sat (and dont get a contact point? Or run gjk again?)
It then builds an incremental manifold (i probably have this wrong) adding a point each frame.
Then once all collision points have been collected for the frame, they go through the collision solver that takes each collision, & adds an impulse to the shape to bring the relative velocity <= 0. We go through the list of contacts several times (the iterative rigid body solver), to stabilise the simulation.
I'm not sure what it uses for discrete collisions?
What things I don't understand is
1. When do we know we don't need a collision point anymore? When the collision points are moving away?
2. How do we know a contact point is unique with gjk/barycentric coords? Or do we just add them and wait till they get pulled off the list?
3. If the toi is less than one & we want to use the rest up, do we run the whole collision routine again for a max say 4 times, to use it up, and where does this fit into the iterative solver?
I kind of just want to get an overview of how a physics engine fits together and the parts or algorithms we need. Its just for a hobby engine, and with understanding as a priority. Any help would be great, and sorry if the question is a bit over simplified.