Efficient mesh collision detection is very complicated. You will have an easier time integrating the most complicated physics libraries then writing this yourself.
However, if you are feeling up to it, and would like to learn, here is what you do:
A: Slow and Naive Method:
For each two triangles in your game, check if they collide with each-other. (Find a triangle-to-triangle intersection method on the internet.)
B: You will very shortly realise that this will kill your CPU. So add a spatial indexer (AABB-Tree or Quad-Tree) to minimize the amount of checks:
For each pair of meshes, check with an AABB-Tree if they might be colliding before you check their triangles.
1. Consruct an AABB-Tree containing all of your meshes as boxes.
2. Find out roughly which meshes might be colliding with the help of the AABB-Tree.
2a. If positive in AABBTree, check again with triangle-to-triangle intersection algorithm.
C: This will be enough if your meshes are extremely simple, and rareley collide. If they are not extremely simple, you will need to add another layer of AABBTree on the meshes:
1. Consruct an AABB-Tree containing all of your meshes as boxes.
2. Find out roughly which meshes might be colliding with the help of the AABB-Tree.
3. Pre-process an AABB-Tree for each of your meshes. (At the beginning of the level, when you load your meshes)
4. Transform mesh1 into mesh2's space.
5. For each triangle in mesh1 check in the AABBTree if it collides with a traingle in mesh2.
5a. If positive in AABBTree, check again with triangle-to-triangle intersection algorithm.
So the two algorithms you need to learn are:
1. AABBTrees, quadTrees, or Octrees. http://en.wikipedia.org/wiki/Octree
2. Intersection of two triangles. http://stackoverflow.com/questions/7113344/find-whether-two-triangles-intersect-or-not
However, if you have never implemented any of this before, it will take you over a month to get it right. In which case, my suggestion to you is:
1. Use bounding boxes instead of meshes for collisions.
or
2. Use a library.