There are many many ways of doing this in games and simulations in general. No one technique will ever be the best as they all have their place.
In general, destructible material goes along with the subject of soft body simulation.
I will assume from here that you have some form of rigid body physics engine which can detect collisions and resolve forces.
Take a mesh and slice it up into nice pieces before even running the game. Connect them with joints in your physics engine and split those joints dynamically based on the item used to fracture the object.
Don't use the joined mesh until you have to. Use the un-fractured version until it's hit with a certain impact/weapon then quickly swap the models, break the joints and let the physics engine take over.
This gives you great control over what can break and how it can break. Truly dynamic fracturing could cause unexpected results and in certain circumstances prevent the game from continuing. Imagine if a pillar broke only just enough to block the exit and the player had no more rockets.
To give it the appearance of being dynamic simply use a mix bag of variants. The physics engine will make the pieces move nicely based on impact point and weapon used anyway.
You can fill your object with a cloud of particles and then augment your mesh based on how these particles move internally. This is often used in soft body or fluid simulations and allows for things to bend, dent, melt etc.
The particles should be bonded together and, when appropriate, these bonds should be broken. When they are the mesh should be split between these bonds.
The way in which things break can be defined through the bonds being used between the particles. Tougher materials like metal can have stronger bonds. Also, you can use different bond definitions with the same object to have it act differently based on the material it's supposed to be made of.
This is an all-round technique, but it's especially good for natural soft things like organic materials. The main issue is the computational load it adds resolving all those particles.
Voronoi fracturing is probably the one I like best. This is simply a technique for splitting the mesh in an interesting way.
It looks nice for structural environments and seems fairly straight forward. This technique will help define fracture lines alone which new polys should be added to the mesh.
The advantage to the example in the link is the decomposition into convex shapes. Convex shapes are required for some physics systems, especially those based on the separation of axis theorem.
FEM is basically about breaking the problem down into small pieces. In this way the particle method above falls into this category, and is considered an "FEM based particle method".
Commonly in FEM the object is represented by a simplified triangular mesh cage which is used as a deformer for the main object mesh. The triangles are dealt with in a fairly individual way to determine how forces work upon them before working out how they impart force onto adjacent triangles.
One difficult part here is how you describe the material used in each triangle. This will determine how the triangle responds to various forces/effects and can make the difference between the simulation seeming real and looking terrible.
This method you will find all over the place and is used in high detail for modelling complex simulations for use in engineering. A common example is modelling how an impact affects a car and those inside it, so various designs can be tested before a working prototype is put through crash testing.
This is mostly a technique for breaking your problem down into managable sets and it's expandable to simulate many physical phenomenon, such as heat transfer or fluid movement. You should be able to find many articles, and probably sample code, around the place, but here is a place to start.
This is a massive topic and will require a lot of research before picking the method you like for your purpose. My main advice is to remember that we are making games, not simulation software, so whichever method you use in the end, make sure it looks good, plays well, remains stable/bug free and, above all, is really good fun.