Often times, clipping takes care of this. During the clipping process,
each vertex is "coded". This coding involves determining the binary value
of a few bits that represent if a vertex is on- or off-screen in any
direction. These bits are later ANDed together to quickly determine if the
polygon is on- or off-screen. This explanation is certainly not good
enough to learn from. But you can start with a document on 3D
clipping I wrote a while ago.
Since you're doing a terrain-based engine, you can take advantage of the
2-dimensional grid that you're working with. You might want to read up on
quad-trees. Quad-trees are a popular way of storing your terrain data so
that you can quickly cull out large clumps of land in the time it takes to
cull a single polygon. They do this by storing the data heirarchically. If
a polygon node in the tree is not visible, then all of the polygons in
that node can be considered not visible. Quad-trees are certainly a viable
option even for beginners, yet powerful enough to yield great results.
Response provided by Paul Nettle