#version unofficial MegaPov 0.7;
camera {
	location <0,5,-5>*1.5
	look_at 0
}
light_source {
	<00,500,-500>
	rgb 1
}
#declare Textuur=texture {pigment {rgb 1}finish {specular 1 roughness .01}}
#declare ResX=50;
#declare ResY=50;
#declare Pig=
pigment {
	bozo
	color_map {
		[0 rgb 0]
		[1 rgb 1]
	}
	scale .25
}

height_field {
	pattern ResX, ResY { 
		hf_gray_16
		Pig
	}
	texture {Textuur}
	scale 2
	translate <-1,0,-1>
	scale <3,1,3>
	translate -x*3.1
	smooth
}

#declare locations=array[ResX+1][ResY+1]
#declare X=0;
#while (X<=ResX)
	#declare Y=0;
	#while (Y<=ResY)
		#declare locations[X][Y]=<X/ResX,eval_pigment(Pig,<X/ResX,0,Y/ResY>).x,Y/ResY>;
		#declare Y=Y+1;
	#end
	#declare X=X+1;
#end
#macro Normaal(XO,YO)
	#if (XO<0) #local XO=0; #end
	#if (XO>(ResX-1)) #local XO=ResX-1; #end
	#if (YO<0) #local YO=0; #end
	#if (YO>(ResY-1)) #local YO=ResY-1; #end
	vcross(locations[XO][YO]-locations[XO+1][YO],locations[XO][YO]-locations[XO][YO+1])
#end
mesh {
	#declare X=0;
	#while (X<ResX)
		#declare Y=0;
		#while (Y<ResY)
			#local Normal=Normaal(X,Y);
			#local Normallinks=Normaal(X-1,Y);
			#local Normallinksboven=Normaal(X-1,Y-1);
			#local Normalboven=Normaal(X,Y-1);
			#local Normalrechtsboven=Normaal(X+1,Y-1);
			#local Normalrechts=Normaal(X+1,Y);
			#local Normalrechtsonder=Normaal(X+1,Y+1);
			#local Normalonder=Normaal(X,Y+1);
			#local Normallinksonder=Normaal(X-1,Y+1);
			smooth_triangle {
				locations[X][Y],(Normal+Normallinks+Normalboven+Normallinksboven)/4,
				locations[X+1][Y], (Normal+Normalrechts+Normalboven+Normalrechtsboven)/4,
				locations[X][Y+1],(Normal+Normallinks+Normalonder+Normallinksonder)/4
			}
			smooth_triangle {
				locations[X][Y+1], (Normal+Normallinks+Normalonder+Normallinksonder)/4,
				locations[X+1][Y], (Normal+Normalrechts+Normalboven+Normalrechtsboven)/4,
				locations[X+1][Y+1],(Normal+Normalrechts+Normalonder+Normalrechtsonder)/4
			}
			#declare Y=Y+1;
		#end
		#declare X=X+1;
	#end
	texture {Textuur}
	scale 2
	translate <-1,0,-1>
	scale <-3,1,3>
	translate x*3.1
}