You could use it for terrain as is certainly as the control points intersect the surface. The control points take vectors so it’s not limited to just a height map.
For example this is the control net that creates this surface the control net is a 9x9 grid. Basically this would be a height map but it will create the surface to follow the control net in x,y and z. So i could make the bumps bend out and around into space.
controlArray = new Vector4[]
{
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,.1f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,.06f,1f), new Vector4(0f,0f,-.05f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,.15f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,.0f,.1f,1f), new Vector4(0f,0f,.1f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f),
new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f), new Vector4(0f,0f,0f,1f)
};
http://i936.photobucket.com/albums/ad207/xlightwavex/programing%20and%20concepts/myownsurface_zpshwaspvhi.gif
It still needs a lot of work though before i start making odd stuff like donuts and toruses.