NeHe OpenGL Lesson34 – Beautiful Landscapes By Means Of Height Mapping
This sample shows us how to create a landscape by means of height mapping. As the word height mapping means that the height of the landscape come from a gray image. Of course, you could apply other method to generate the height values like randomly seeds calculation, or modeling the whole stuff with content create package like Maya or Max. Save the height values as a image, the artist could know how the mountain or valley going along in the landscape. They could even paint the height map with PS or some special terrain tools.
The image show on the left is the height map that used in this sample. You could open the Terrain.raw file with PS. The bright are means the height value is much higher than the dark area.
Here is main logic of how the height map landscape mesh generated:
pHeightMap = {raw image file content} ... int Height(BYTE *pHeightMap, int X, int Y) { // customize height calculation function could be used here! return pHeightMap[x + (y * MAP_SIZE)]; } ... // create the landscape mesh for ( X = 0; X < (MAP_SIZE-STEP_SIZE); X += STEP_SIZE ) { for ( Y = 0; Y < (MAP_SIZE-STEP_SIZE); Y += STEP_SIZE ) { // Get The (X, Y, Z) Value For The Bottom Left Vertex x = X; y = Height(pHeightMap, X, Y ); z = Y; // use the same way generate the following 3 point : // (X, Y+STEP_SIZE), (X + STEP_SIZE, Y + STEP_SIZE) // (X + STEP_SIZE, Y) } }
The full source code could be found here.