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

Aléatoires nombres aléatoires, À tous les coups pas pareils

Objectifs

Obtenir des nombres aléatoires qui varient à chaque rendu !

Pourquoi, comment ?

Nous avons vu l'intérêt d'avoir des nombres aléatoires, qui sortent à chaque fois dans le même ordre.

run1 5,6,9,1,5,4,2,13...
run2 5,6,9,1,5,4,2,13...

Mais il peut être souhaitable de retourner à chaque calcul un ordre différent et laisser le hasard faire les choses..
pour trouver la bonne graine ou pour le fun.

run1 5,6,9,1,5,4,2,13...
run2 2,12,50,8,11,30,21,0...

Pas de mystère, il nous faut récupérer un nombre qui va changer à chaque lancement de calcul.

Trois méthodes

  1. Pur POV-Ray 3.1
  2. MegaPov 0.4
  3. Bricolage Externe pour POV-Ray 3.1
  4. Scène commune pour exemple

Pur POV-Ray 3.1

Nous écrirons un nombre qui sera incrémenté à chaque lancé dans un fichier externe..

#if(file_exists("MetGraine.txt"))                          // vérifie si Graine.txt existe
                #fopen  LireGraine  "MetGraine.txt" read   // ouverture du fichier MetGraine en mode lecture
                #read  (LireGraine,Graine)                 // lecture du nombre aléatoire
                #fclose LireGraine                         // fermeture du fichier MetGraine en mode lecture
                #debug concat(str(Graine,2,3))             // voir dans la fenêtre message (console) pour contrôle
#else
        #declare Graine=1;  // S'il n'y a pas encore de fichier MetGraine.txt
#end

#declare   Graine=Graine+1;
                #fopen MetGraine "MetGraine.txt"  write 	// ouverture du fichier MetGraine en mode écriture
                #write (MetGraine,Graine)			//on met la valeur de Graine dans le fichier MetGraine.txt
                #fclose MetGraine 				// Fermeture du fichier MetGraine en mode écriture
                #debug concat(str(Graine,2,3))		// voir dans la fenêtre message (console) pour contrôle
#declare Random= seed(Graine); 				// met la graine dans seed


Vous voyez que ça sert vraiment à quelque chose, la petite graine !

MegaPov

Utilisation des fonctions date de Megapov04 ( D'après le fichier hasard.inc de Rodolphe Gelaude)

//------------------------------
#declare minute=date("%M")
#declare seconde=date("%S")
#declare heure=date("%H")
#declare jour=date("%j")
#declare chiffre1=asc(seconde);
#declare chiffre2=asc(minute);
#declare chiffre3=asc(heure);
#declare chiffre4=asc(jour);
#declare final=chiffre1+chiffre2+chiffre3+chiffre4;
#declare Random=seed(final);

Encore plus simple utilisation de la fonction tick_count (MegaPOV 0.5)

#declare Random = seed(tick_count);

tick_count renvoie la valeur du compteur de l'horloge interne suivant la plate-forme. Le compteur est incrémenté de 60 pour les Mac et de 200 pour Atari et Intel

vraiRand

Bricolage externe pour POV-Ray 3.1 (DOS/Windows)

Nous allons récupérer l'heure système à l'aide d'un utilitaire (DoSeed.exe par Martial ou MkSeed de Jean Michel Soler)
Un nombre sera créé (d'après l'heure système donc jamais le même) dans un fichier txt nommé:

PutSeed.txt pour DoSeed ou Vraigrai.txt pour MkSeed
(vers les fichiers Dossed.exe et MkSeed.exe)
Nous lancerons le calcul par un fichier ini (Seed.ini)
placé dans le même répertoire que le fichier exemple random.pov

;---fichier Seed.ini----- avec Doseed

Pre_Frame_Command=Doseed.exe                	; Place la commande après chaque page (lancé avec un clock)
					; ou l'on créer un nombre aléatoire (Pre_Scene_Command si sans clock)

input_File_Name=random.pov 			; pour lancer la scène exemple
-f  					; l'enregistrement de l'image à off
Initial_Frame=0   				; pour la scene exemple en animation
Final_Frame=5
Initial_Clock=0
Final_Clock=1
;---------Fin Seed.ini-----

Puis lirons le nombre dans un fichier pov.

//--------------Fichier Pov---------
 #fopen  LireGraine  "Putseed.txt" read 	// ouverture du fichier Putseed en mode lecture
                #read  (LireGraine,Graine)	// lecture du nombre aléatoire
                #fclose LireGraine		// Fermeture du fichier Putseed en mode lecture
                #debug concat(str(Graine,2,3)) // voir dans la fenêtre message (console) pour contrôle

#declare Random= seed(Graine); 		// met la graine dans seed

//-----fin fichier pov------

Remplacer Doseed.exe par MkSeed.exe si c'est votre choix et PutSeed.txt par Vraigrai.txt

Scène d'exemple

//---------Ramdom.pov fichier exemple--------
//------- insérer ici votre façon de faire des aléatoires de nombres aléatoire

	//		Pur POV-Ray 3.1

	//		MegaPov04

	//		Bricolage Externe pour POV-Ray 3.1

//----------fin insertion-----------------------

#declare Z=50;
camera
{
  orthographic
  location  < 0.0 , 0.0 ,-20.0 >
  right < Z*(160/120), 0, 0 >
  up < 0,Z,0 >
  direction < 0,0,1 >
  look_at   < 0.0 , -0.0 , 0.0 >
}

light_source { < 0,10,-100 > rgb 2}
background { rgb 0.1}
#declare i=20;
#while ( i>- 20 )
sphere { <0,0,0>,3 pigment { rgb < rand(Random),rand(Random),rand(Random) > } finish { ambient 0.3 diffuse 0.6} translate x*-i*1.4}
#declare i = i-4;
#end
//----- Fin Exemple -----

Les outils Doseed et MKSeed

http://martial.rameaux.free.fr/outils/doseed.zip
http://martial.rameaux.free.fr/outils/mkseed.zip

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

rédacteur : Martial Rameaux