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( ).
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