The entire API was redesigned. You pretty much have to rewrite everything. If you are considering using D3D10 you are better off moving to D3D11 since it introduce the FeatureLevel system which allows you to support Direct3D9.
It all depends on what you are trying to achieve, But usually the best way to start is to have one VBO and multiple IBO that reference different part of the terrain, that way you can have multiple textures use on the same terrain and render all batch that uses the same texture. The other option is to have one IBO and one VBO and just use an Atlas, but i would not recomemend doing that for terrain as it becomes an hasstle when you trying to blend between tiles on the terrain. There are tons of way you can go about this and what i just mention is only scratching the surface.
a,b,c represent the plane normal and x y z is the point you want to project.
if you you know A,B,C then computing d is -(p.x*pl.a+p.y*pl.b+p.z*pl.c) which is basically the -Dot(Normal,Point) where normal is represented by a,b,c and point is x,y,z.
The whole point of projecting is to figure out how far a surface is aways from something and that is what the DotDistance gives you, it tells you how far that point is from the plane. Once you know how far it is you can easily find the point on the plane by subtracting the plane dot distance from the point using the parametric equation of the line.
To find an point on a line you can use the parameteric equation of a line which is p=p0+D*t where p0 is your starting location, D is your direction and needs to be normalized and t is the distance. After you find the distance from the plane dot distance, you can go and plug it in the line parameteric equation and that will give you an point on the plane. I have written some code bellow that will help you achieved that.