#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 }