I found this on a board search. Perhaps you could use this to perform some frustrum culling on your terrian.

This code was originally posted by Mr. Wizard.Code:`void Frustum::Calculate( D3DXMATRIX *lpMatView, D3DXMATRIX *lpMatProj )`

{

D3DXMATRIX matClip;

D3DXMatrixMultiply( &matClip, lpMatView, lpMatProj);

D3DXMatrixInverse( &matClip, NULL, &matClip );

// Use unit extents at first

vertices[0] = D3DXVECTOR3(-1.0f, -1.0f, 0.0f);

vertices[1] = D3DXVECTOR3( 1.0f, -1.0f, 0.0f);

vertices[2] = D3DXVECTOR3(-1.0f, 1.0f, 0.0f);

vertices[3] = D3DXVECTOR3( 1.0f, 1.0f, 0.0f);

vertices[4] = D3DXVECTOR3(-1.0f, -1.0f, 1.0f);

vertices[5] = D3DXVECTOR3( 1.0f, -1.0f, 1.0f);

vertices[6] = D3DXVECTOR3(-1.0f, 1.0f, 1.0f);

vertices[7] = D3DXVECTOR3( 1.0f, 1.0f, 1.0f);

// Transform unit extents by inverse clip matrix

for( int i = 0; i < 8; ++i )

D3DXVec3TransformCoord( &vertices[i], &vertices[i], &matClip );

// Calculate the planes of the frustum from the given extents

D3DXPlaneFromPoints( &planes[0], &vertices[0], &vertices[1], &vertices[2] );

D3DXPlaneFromPoints( &planes[1], &vertices[6], &vertices[7], &vertices[5] );

D3DXPlaneFromPoints( &planes[2], &vertices[2], &vertices[6], &vertices[4] );

D3DXPlaneFromPoints( &planes[3], &vertices[7], &vertices[3], &vertices[5] );

D3DXPlaneFromPoints( &planes[4], &vertices[2], &vertices[3], &vertices[6] );

D3DXPlaneFromPoints( &planes[5], &vertices[1], &vertices[0], &vertices[4] );

}

Hope it helps.

I'm coding a terrain system as well just to test some new theories and perhaps be more on the same page as you are so we can continue this discussion. Terrain is very cool and an integral part of most games. Doing it right is very hard.