vers l'index général de l'aide

eval_pattern et eval_pigment

objectif

Obtenir la valeur d'un motif ou d'un pigment en un point de l'espace.

compatibilité

MegaPOV

syntaxe

eval_pattern

 #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>);

eval_pigment

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

exemples

eval_pattern

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}

eval_pigment

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}

remarque

La fonction trace est naturellement complémentaire de ces deux fonctions, avec lesquelles elle ouvre des possibilités immenses...

Rédacteur: Fabien Mosen

vers l'index général de l'aide