Mathematica/3DContours

Mathematica supports 3D contours on surfaces using the option MeshFunctions.

MeshFunctions draws ISO lines of an arbitary function of the x,y,z values, and for some functions additional parameters.

For a conventional set of altitude contours we just use the identity function of the z value (the third parameter) using MeshFunctions->{#3&}

eg Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3}, MeshFunctions -> {#3 &}]

In addition the region between the contours can be colored using the option MeshShading. The following example divides the image into 10 altitude contours and colors them in gray scale.

Plot3D[Sin[x y], {x, 0, 3}, {y, 0, 3}, Mesh -> 10, MeshFunctions -> {#3 &},  MeshShading -> GrayLevel /@ Range[0, 1, 0.1], Lighting -> "Neutral"]