As dpadam450 said, the type of culling you're referring to is handled automatically by GL...
There are other types of culling, like object culling, as he also mentioned.
Implementing these methods are pretty advanced topics...
Object culling is somewhat easier, for example you can simply wrap an object render call with a GL object occlusion query, then use the previous frame's results to either draw the full version of the object (was visible) or a simplified bounding box version (was not visible).
Then there's a system like I've implemented which is basically octree-based occlusion query geometry culling. First you build an octree from your geometry, then use it's nodes with occlusion queries to determine their visibility, similar to the object-based method described above... But instead of a whole object as a single entity, you're basically breaking a very large object (map geometry) into smaller pieces to be handled individually.
Beyond that - there's a system like PVS (Potentially Visible Set) which quake-like engines implement, as well as unity and other mainstream game engines through Umbra. It's similar to the octree-based method above, but different. First off, instead of an octree, it typically uses just a constant (non-recursive) spatial grid. The major difference is that it doesn't use realtime occlusion queries, but instead is precalculated. Basically, for every grid - it determines which other grids are potentially visible, so then when the camera is in a specific grid, it already knows which other ones to render.