Can you tell us do you render terrain in little chunks (and how big they are?)
Terrain is tesselated to a chosen level (256 for this sample) : for this sample, terrain is divided in smaller part until face size =1/256 of the full terrain size. It is possible to use heightmap from file but also perlin-noise or any 2D function as input.
How many LOD pre-calculated vertices do you have?
When terrain is tesselated only significants faces are created (face is not divided when it is not necessary). only necessary vertices are created and they are not duplicated : vertices number approximatively equals 0.5 faces number for that sample about 16000 vertices.
You mentioned that terrain consist of 35000 faces - does it mean it is 187 x 187 terrain ?
No, for this sample heightmap is 257*257 but lot of faces are removed (or not divided because child faces lie on parent face => big flat surface)
What graphic card is used for rendering 25 fps?
My video car is a radeon x800 but because it is full software (work with pixels array) only final image blitting is performed by the videocard (Graphics.drawImage(,,,)) so differents videocard do not produce big differences in fps. I change my video card a month ago (before I had a radeon 7000) and only notice a maximum of 3-4fps diff on demo running at 30fps.
That sea - is it just painted terrain or something else
Yes sea is a part of the terrain but use the same map as ground texture: terrain is rendering using two texture one for color (with bilinear filtering/mipmapping) and an other for detail (only mipmap)
Terrain engine (tesselator and LOD generator) is a standalone component, maybe I will share it in "share code section" in few weeks. It can use any heightmap able to answer the question height=getAt(double x,double y) with : 0.0<x<1.0,0.0<y<1.0, 0.0<height<1.0 so it can use any kind of heightmap generator: file, perlin noise, function... and can generate LOD mesh (face list) for a desired number of face or quality with the minimum visual impact for a given wiew point .