Well, since you were talking about static buffers, you could split your terrain up into a grid, lets say, 4x4.
x-> Terrain Slice
EDIT. Replaced text with image.
If you really want to see the old one, here you go. (Some formatting errors due to spoiler)
As you have a top down view, then I tried (beware the 'tried') to illustrate what area it can see from the camera. Now as we have split the terrain up into this beautiful grid, you could build a view frustum, meaning something like this: (And then remove the 'not seen' parts of the terrain to improve performance)
void M3DEngine::RenderMyTerrain() // M3DEngine -> My3DEngine
for(int i = 0; i < mTerrainCount; i++)
if (!ViewFrustum::IntersectsBox(Camera.GetView(), Terrain[i].BoundingBox))
continue; // Well, this entire terrain isn't visible
for(int s = 0; s < Terrain[i].mSlices; s++)
if (!ViewFrustum::IntersectsBox(Camera.GetView(), Terrain[i].mSlice[s].BoundingBox))
continue; // Well, this terrain slice wasn't visible
RenderThisBeauty(); // With the buffers sent and the shader set, render it.
// PS. This last stuff completely depends on your engine architecture!
PS. This piece of code isn't found anywhere, it just came out of my head, so If you find any errors, tell me .
This is just one of the many ways, hope it helps!
Edited by Migi0027, 06 October 2013 - 12:48 PM.