You will use procedural methods to generate a virtual landscapes. The project can be divided into the following three parts.

computer science


Procedural Landscape Generation


You will use procedural methods to generate a virtual landscapes. The project can be divided into the following three parts.

  • geometry (mesh generation, procedural height generation)
  • rendering (terrain shading, texturing)
  • animation (camera animation)

Each of these parts are subdivided into basic and advanced tasks.


  • create a flat (z=0) triangular mesh. Do so using GL_TRIANGLE STRIP, making use of GL_PRIMITIVE RESTART
  • implement Perlin noise on the CPU (see noise.h)
  • generate a height map texture using fBm (read this tutorial on fractional Brownian motion)
  • use the height map texture to displace grid vertices in the vertex shader



  • implement noise texture generation in the fragment shader (5%)
  • implement other noise functions to generate terrain (e.g. hybrid multifractal and ridged multifractal) (5%)
  • instead of generating a plane world, create a spherical world (10%)
  • create an infinite world (new tiles on demand, requires GPU noise) (15%)
  • use L-system to add trees to your terrain (15%)
  • use noise functions to generate clouds (and integrate participating media in fshader) (10%)


  • calculate surface normals, add diffuse and specular shading.
  • use the tile-able textures (shown above) to texture your terrain. In the fshader you can use the normal of a fragment (slope of terrain) and its height to decide which textures to blend. For example, snow does not deposit on very steep slopes, and happens only at a certain height. (Download *.png: grass, rock, sand, snow, water)
  • implement the skybox texture using OpenGLs cubemap textures. Surround your scene with a cube, and texture this cube to color the sky of your scene. Under Textures folder, you can find miramar_*.png which may be used to create the skybox. You will have to write UV texture coordinates in your C++ code so as to map faces of the cube to the correct portion of the image/texture (reference).


  • use an OpenGL CubeMap to texture the sky and get rid of artifacts caused by discontinuities in the UV parameterization (5%).
  • use the normal map texture (water.png) to represent waves. You can overlap multiple scaled copies of this texture and translate them over time to emulate a water effect (5%).
  • add a mirroring eect to the water; this is achieved by mirroring the camera position with respect to the water plane, render your scene in a framebuffer, and placing the texture back in a second step. You can also simulate refraction by blending the mirrored and non-mirrored images according to the incidence angle of your camera w.r.t. water (15%)
  • simulate the fact that reflections are affected by water movement by distorting the reflected image with a noise function (5%)


implement WASD (forward/backward, left/right) camera controls



  • use a bezier curve to animate the camera path (5%)
  • implement a FPS camera, camera height is determined by terrain height (5%)

Related Questions in computer science category