Povray/tutorials/Loop

De TartareFR
Aller à la navigation Aller à la recherche

Introduction

Dans ce tutorial, je veux montrer quelques applications élémentaires de la boucle « tant que » [ While loops ] dans POV-Ray. La boucle While est employée pour le placement régulier des objets. Les exemples suivants montrent une boucle simple et des boucles imbriquées.

Note.png
Fichiers inclus
Tous les fichiers de scène de POV-Ray des échantillons suivants sont téléchargeables. La plupart des fichiers de scène de POV-Ray emploient le fichier d'inclusion pour le système de coordonnées. Ce dernier a besoin d'un fichier de font.

Boucles simples et imbriquées

D'abord nous considérons une boucle simple qui place de petites sphères le long de l'axe de x, de x = -5 à x = +5
//------------------------------------
#declare Ball =
 sphere{<0,0,0>,0.5
        texture{pigment{color Red}
                finish {ambient 0.15
                        diffuse 0.85
                        phong 1}
               }
        }
#declare NrX = -5;     // start
#declare EndNrX = 5; // end
#while (NrX < EndNrX+1)
 object{Ball translate <NrX,0,0>}

 #declare NrX = NrX + 1;  //next Nr

#end // ----------- fin de boucle ----
Si nous imbriquons une boucle existante dans une autre boucle, faisant un pas de la valeur z = 0 à z = +5, nous obtenons un champ rectangulaire couvert par des objets identiques
//------------------------------------
#declare Boxy =
 box {<0,0,0>,< 1,1,1> scale 0.5
         texture{pigment{color White}
                finish {ambient 0.1
                        diffuse 0.9}}}
#declare DistanceX = 1.00;
#declare DistanceZ = 1.00;
#declare NrX = 0;      // startX
#declare EndNrX = 7;   // endX
#while (NrX < EndNrX) // <-- loop X
 #declare NrZ = 0;     // start
 #declare EndNrZ = 7;  // end
 #while (NrZ < EndNrZ) // <- loop Z
 object{Boxy
        translate<NrX*DistanceX, 0,
                  NrZ*DistanceZ>}
  #declare NrZ = NrZ + 1;  // next NrZ
 #end // ------------- fin de boucle Z
 #declare NrX = NrX + 1;// next NrX
#end // ----------- fin de boucle X --
Il est posibble d'imbriquer une boucle dans une boucle additionnelle imbriquée, faisant un pas de la valeur y = 0 à y = +5. Avec ceci, nous obtenons une boîte constituée par les objets identiquement formés
//------------------------------------
#declare DX = 1.00;
#declare DY = 1.00;
#declare DZ = 1.00;
#declare NrX = 0;      // startX
#declare EndNrX = 5;   // endX
#while (NrX < EndNrX)
 #declare NrY = 0;     // startY
 #declare EndNrY = 5;  // endY
 #while (NrY < EndNrY)
  #declare NrZ = 0;    // startZ
  #declare EndNrZ = 5; // endZ
  #while (NrZ < EndNrZ)
  object{Boxy
         translate
            <NrX*DX,NrY*DY,NrZ*DZ>
        }
  #declare NrZ = NrZ+1;// next NrZ
  #end // -------- fin de boucle Z
 #declare NrY = NrY+1;// next NrY
 #end // -------- fin de boucle Y
 #declare NrX = NrX+1;// next NrX
#end // --------- fin de boucle X ----


Avec cet échantillon, nos possibilités, considérée comme de pures transformations linéaires avec imbrication de boucles, nous semblons bien avoir parcouru tout notre monde tridimensionnel.