vers l'index général de l'aide
Obtenir la valeur d'un motif ou d'un pigment en un point de l'espace.
MegaPOV
#declare Valeur = eval_pattern (motif,<Point>);
eval_pattern prend un motif quelconque (bumps, wood, etc..), et un vecteur indiquant un point de l'espace, pour renvoyer une valeur comprise entre 0 et 1, qui correspond à la valeur du motif en ce point.
On peut spécifier "au vol" des transformations à appliquer au motif :
#declare Valeur = eval_pattern (bumps scale .25 translate <1,4,2> ,<Point>);
#declare ValeurCouleur = eval_pigment (MonPigment,<Point>);
eval_pigment prend une définition de pigment, aussi complexe soit-elle, et un vecteur indiquant un point de l'espace, pour renvoyer un vecteur correspondant à la couleur du pigment en ce point.
Une double boucle balaye un espace carré, évalue le motif à intervalles régulier, et place à chaque intervalle un cylindre dont la hauteur dépend de la valeur du motif à sa base.
camera {location <10,10,10> direction z*1 look_at <5,0,5>} plane {y,0 pigment {bumps scale 2}} #declare I=0; #while (I < 10) #declare J=0; #while (J < 10) #declare Point = <I,0,J>; #declare Hauteur = eval_pattern (bumps scale 2,Point); cylinder {<I,0,J>,<I,Hauteur*2,J>,.1 pigment {OrangeRed}} #declare J=J+.25; #end #declare I=I+.25; #end light_source {<40,20,30> White*2}
Le principe est le même que dans l'exemple précédent. On récupère une valeur de couleur, et, au moment de l'utiliser, on la soustrait de 1, pour obtenir le "négatif" de la couleur de départ.
#declare Pig1 = pigment { waves color_map {[0 YellowGreen][.5 OrangeRed][1 SteelBlue]} } plane {y,0 pigment {Pig1}} #declare I=0; #while (I < 10) #declare J=0; #while (J < 10) #declare Point = <I,0,J>; #declare CouleurPig = eval_pigment (Pig1,Point); sphere {<I,.2,J>,.2 pigment {rgb 1-CouleurPig}} #declare J=J+.25; #end #declare I=I+.25; #end light_source {<40,50,30> White*2}
La fonction trace est naturellement complémentaire de ces deux fonctions, avec lesquelles elle ouvre des possibilités immenses...
Rédacteur: Fabien Mosen