import graph3;
import grid3;
import palette;
size(400,300,IgnoreAspect);
currentprojection=orthographic(dir(50,50));
real f(pair z) {return cos(2*pi*z.x)*sin(2*pi*z.y);}
surface s=surface(f,(-1/2,-1/2),(1/2,1/2),50,Spline);
surface S=planeproject(unitsquare3)*s;
S.colors(palette(s.map(zpart),Rainbow()));
draw(S,nolight);
draw(s,lightgray+opacity(0.7),render(tessellate=false));
grid3(XYZgrid);