1. To create a flat terrain, just set the y coordinate to 0
2. The vertices in D3D must be defined in clockwise order. see the picture below
so, when you specify the two triangles, you should say, (v0, v1, v2) and (v0, v2, v3), this is the clockwise order, otherwise, the triangle will be culled, and you will see nothing!
3. For any texture the UV co-ordinates are 0,0 for top left and 1,1 for bottom right
4. By default, the D3DXCreateMesh function only support 16bit-indices, that’s to say, you can’t create a terrain with more than 65535 faces, see the first parameter of this function, in order to create a large map, you need to specify the D3DXMESH_32BIT filed, like the following
D3DXCreateMesh(numTris, numVerts, D3DPOOL_SCRATCH|D3DXMESH_32BIT, elems, gd3dDevice, &mesh) ;
and the index buffer must be defined with type DWORD, like
DWORD* k = 0;
HR(mTerrainMesh->LockIndexBuffer(0, (void**)&k));
5. A normal for a vertex is generated by averaging the normals of all faces that share that vertex.