Light map lighting is accomplished by creating a texture called a light map. Lighter parts of the light map represent brighter areas of lighting and darker areas are darker areas of lighting. The light map is then laid over another texture, giving that texture lighting. These three images below show a light map, a texture map, and a light map over a texture map.
A Standard Light Map
A standard texture map
A light map over a texture map
Light maps can be drawn by hand or calculated through various techniques. In some cases they can look very good and in others they can look poor. Calculating changing light maps on the fly is extremely CPU intensive, so it is rarely done. Instead, when light maps are used, they are usually calculated or drawn by the developer when making the initial product and applied to areas where the lighting value does not need to change.
Flat lighting is accomplished by calculating a lighting value for an entire polygon, then giving every pixel on that polygon the same color. Flat lighting usually looks very flat (go figure), unrealistic, and fauceted (not Farah).
Vertex lighting is what is most commonly used in games and is supported in OpenGL. It is also known as Gouraud shading. Vertex lighting calculates lighting for each of the vertices of a polygon from the normal of each of each of the vertices. Then the lighting values are interpolated between the three vertices across the entire polygon.
Vertex lighting is quick, but it looks the best when there are a lot of polygons in an object. When there are too few polygons, you get a fauceted, coarse look. Here are two images showing vertex lighting with a low polygon plane and a high-polygon plane.
Low polygon plane
High polygon plane
This diagram shows how the lighting values for each pixel are interpolated in vertex lighting.