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 sur height_field
Voir l'image 640x480 - 146Ko

 


Source:
// -----------------------------------------------------------------------------------
// louis bellotto - louisbel @ free.fr - septmebre 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 dessine.
// -----------------------------------------------------------------------------------
#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


Haut de la page | Sommaire ]