displacement KTleafD ( float xyscale=4,xyamp=0.5,xyoffset=0; float zscale=0,zamp=0.05,zoffset=0; float wavescale=1,zmax=0.1,waveoffset=0; float startwave=0,endwave=1; float xytype=0,ztype=0,wavetype=1; point Center=point(0,0,0),wavezP=point(0,0,-1) ) { point PP,NF,NFz; float ss; float wavexymag,wavezmag,mag; float wavetheta; PP=transform("object",P); NF=normalize(N); NFz=wavezP-Center; NFz=normalize(NFz); /*printf ("NFz = %p\n",NFz);*/ ss=s*wavescale; wavetheta=(cos(2*PI*ss+2*PI*waveoffset)+wavetype)/2; wavetheta=mix(startwave*PI/2,endwave*PI/2,wavetheta); wavezmag=2*zmax*(1-sin((PI/2)-wavetheta)); wavexymag=wavezmag*tan((PI/2)-(wavetheta/2)); wavezmag*=t; wavexymag*=t; P+=wavexymag*NF+wavezmag*NFz; N=calculatenormal(P); ss=s*xyscale; mag=(cos(2*PI*ss+2*PI*xyoffset)+xytype)/2; mag*=xyamp; P+=mag*normalize(NF); N=calculatenormal(P); ss=s*zscale; mag=(cos(2*PI*ss+2*PI*zoffset)+ztype)/2; mag*=zamp; P+=mag*NFz; N=calculatenormal(P); }