GALERIE    EN COURS    SCENES    MACROS    GUIDE    A PROPOS


Utilisation des height_field et de la fonction hf_height_at( ), utilisation des tableaux array et des variables aléatoires grace aux fonction seed( ) et rand( ).
gravier
Script :
// -----------------------------------------------------------------------------
// louis bellotto - louisbel @ free.fr - septembre 2000
//
//    Utilisation des "height_field" et de la fonction "hf_height_at".
//    Utilisation des tableaux "array".
//    Utilisation des variables aléatoies "seed()" et "rand()".
// -----------------------------------------------------------------------------
#version unofficial MegaPov 0.7;

// -----------------------------------------------------------------------------
#include "colors.inc"

// -----------------------------------------------------------------------------
camera {
  location < 10, 8, 10 >
  look_at < 0, 0, 0 >
  }

// -----------------------------------------------------------------------------
light_source{
  < 0.00, 500.00, 0.00 >
  color White
  }

// -----------------------------------------------------------------------------
// declaration et chargement du height_field. le fichier en niveau de gris est
// au format png. Nota : le height_field n'est pas dessiné.
// -----------------------------------------------------------------------------
#declare theHeightField = height_field { png "hf128.png" }

// -----------------------------------------------------------------------------
// declaration d'un gravier.
// -----------------------------------------------------------------------------
#declare point = sphere { < 0,0,0 > 0.25 }

// -----------------------------------------------------------------------------
// declaration des variables
// -----------------------------------------------------------------------------
#declare steep = 0.010;    // pas d'exploration du height_field
#declare scaleH = 3;    // echelle verticale (y) du height_field
#declare scaleW = 15;    // echelle horizontale (x et z) du height_field

#declare alea = seed(1357);  // initialisation du generateur de nomnre aleatoire

// -----------------------------------------------------------------------------
// declaration des couleurs utilisees dans un tableau de 5 elements.
// -----------------------------------------------------------------------------
#declare myColors = array [5] // declaration du tableau

// remplissage du tableau avec des couleurs rgb.
// nota : 5 elements de 0 a 4
#declare myColors[0] = rgb < 0.899992, 0.669429, 0.423011 >;
#declare myColors[1] = rgb < 0.899992, 0.820951, 0.747005 >;
#declare myColors[2] = rgb < 0.870314, 0.899992, 0.603006 >;
#declare myColors[3] = rgb < 0.739986, 0.639338, 0.236805 >;
#declare myColors[4] = rgb < 0.499992, 0.396063, 0.284993 >;

// -----------------------------------------------------------------------------
// boucle d'exploration du height_field
// -----------------------------------------------------------------------------
#declare zIndex=0;
#while (zIndex< 1)
  #declare xIndex=0;
  #while (xIndex< 1)
    // recuperation de l'altitude du point de coordonnes < xIndex,zIndex >
    #declare hfHeight = hf_height_at(xIndex, zIndex, theHeightField);
    // mise à l'echelle
    #declare yPos = hfHeight*scaleH;
    #declare xPos = (xIndex-0.50)*scaleW;
    #declare zPos = (zIndex-0.50)*scaleW;
    // choix aleatoire d'une couleur entre 0 et 4
    #declare cIndex=int(rand(alea)*4);
    // dessin d'un gravier
    object {
      point
      scale < rand(alea), rand(alea), rand(alea) >// deformation de la sphere
      translate < xPos, yPos, zPos > // deplacement suivant le height_field
      pigment { color myColors[cIndex] } // couleur du gravier
      finish { ambient 0.50}  
      }
    #declare xIndex=xIndex+steep; // point suivant sur l'axe x
  #end
  #declare zIndex=zIndex+steep; // point suivant sur l'axe z
#end