Combining a surface plot with a contour plot

[Based on an example on the web.]

Here’s the function ‘myf(s,h)’ that we’d like to plot:

myf=-3600. h^2+0.02974 h^4-5391.90 s^2+0.275 h^2 s^2+0.125 s^4;

Plot the function in 3-d, with h as the x-coordinate, and s as the y-coordinate.

Plot3D[myf,{h,-400,400},{s,-300,300},PlotRange->{-1.4*10^8,2*10^7}]

With fancy options to paint the contours (See MeshFunctions....) on the surface plotted:

mysurfaceplot=
Plot3D[myf,{h,-400,400},{s,-300,300},PlotRange->{-1.4*10^8,2*10^7},ClippingStyle->None,MeshFunctions->{#3&},Mesh->15,MeshStyle->Opacity[.5],MeshShading->{{Opacity[.3],Blue},{Opacity[.8],Orange}},Lighting->"Neutral"]

Here’s the contour plot of the same function.  In general the “high” parts of the function are light and the low parts are darker colors.  Notice Contours->15 here, and Mesh->15 in the previous plot to set the number of (evenly spaced) contours.

ContourPlot[myf,{h,-400,400},{s,-300,300},PlotRange->{-1.4*10^8,2*10^7},Contours->15]

Turn off the axes display, and do some other things to strip all the surrounding parts from the plot.

mycontourplot=ContourPlot[myf,{h,-400,400},{s,-300,300},PlotRange->{-1.4*10^8,2*10^7},Contours->15,Axes->False,PlotPoints->30,PlotRangePadding->0,Frame->False]

Now the idea is to put the 2-d picture on a plane polygon, that can be positioned in 3-d:
   1. Use the contour plot picture as a ‘texture’.
   2. Apply that texture to a polygon--specified by its 3-d vertices,
   3. Say where, within the polygon, the texture should be located. [It would normally tile to fill all available area of the polygon, but we just want to stretch our texture, not make it repeat].

Graphics3D[
{
Texture[mycontourplot],
EdgeForm[],
Polygon[
{{0,0,0},{1,0,0},{1,1,0},{0,1,0}},VertexTextureCoordinates->{{0,0},{1,0},{1,1},{0,1}}
]
},Lighting->"Neutral"
]

Now, we’d like the polygon to stretch out to fit underneath the x- and y-range specified, and position it at a z-value below the lowest point in the plot:

level=-1.2 10^8;gr=Graphics3D[{Texture[mycontourplot],EdgeForm[],Polygon[{{-400,-300,level},{400,-300,level},{400,300,level},{-400,300,level}},VertexTextureCoordinates->{{0,0},{1,0},{1,1},{0,1}}]},Lighting->"Neutral"];

Finally, show in the same 3-d space the 2 objects we’ve built up: gr--the textured polygon, and mysurfaceplot--the 3-d plot of the surface.

Show[mysurfaceplot,gr,PlotRange->All,BoxRatios->{1,1,.6},FaceGrids->{Back,Left}]