In order to procedurally generate terrain, we just need to create a height map and update it as a function of time.
A height map is essentially the value of the height y at a certain (x, z) coordinate. Height maps can be imported into a game engine as a grayscale image where the intensity at an x,z position corresponds to a certain height y. This is great because we can also export maps we generate using code.
For procedurally generated terrain, we can think of the above described height map as the elevation data for the map at a certain point in time, t=0. If we increment t by a certain number, then we should get a new height map that is relative to the map at previous time steps.
A technique we used to implement procedurally generated terrain for our project included using a noise function. Usually a noise function outputs a random number from 0 to 1, so we would map this number to a larger range to have more a scaled or more realistic height. For each time step t, we would have to update the height map.
Here is an image of a texture rendering using triangle strips and mesh coloring of a heightmap image that we found:
