Terraform Guide Utilisateur
Auteur: Robert Gasch, Mis à jour par David A. Bartold
Traduction Raymond Ostertag
Voici le guide utilisateur de terraform, un modeleur/générateur
interactif de terrain numérique.
Note du traducteur : voyez aussi la documentation francophone ne faisant
pas partie de la distribution de Terraform qui est disponible
sur le site Terraform-fr
Table des matières
FAQ (Foire aux question)
Les réponses aux principales questions posées
sont disponibles ici.
Tutorial
Un petit tutorial est disponible ici
pour les débutants.
Fenêtre principale
La fenêtre Principale permet à l'utilisateur
d'ouvrir de nouvelles fenêtres pour les terrains. Un terrain peut
être chargé ou créé d'après plusieurs
algorithmes. La fenêtre des Options accessible depuis la fenêtre
Principale contient plusieurs paramètres globaux tel que l'emplacement
de l'exécutable POV-Ray et le nombre maximum d'Annuler.
Générer un nouveau terrain
La façon la plus simple de générer
un nouveau terrain est de sélectionner "Aléatoire"
dans le menu. Cela va automatiquement sélectionner un ou plusieurs
algorithmes différents d'après un paramètre généré
aléatoirement et créer un nouveau terrain pour vous.
Bruit Perlin
La fonction de bruit composé Perlin est
calculée en prenant la somme de plusieurs octaves de bruit. Pour
produire une octave de bruit à deux dimensions, un réseau
de nombres aléatoires est interpolé. La distance entre points
est déterminée par la fréquence.
Synthèse spectrale
La synthèse spectrale implique de remplir
un tableau avec des données aléatoires. Le tableau
alimente une fonction de transformation inverse de Fourier pour générer
le terrain.
Subdivision
L'algorithme de subdivision donne initiallement
des valeurs aléatoires à des points extérieurs puis
ces points sont utilisés pour calculer un point intérieur.
Par exemple, l'algorithme récursif positionne les quatres coins
du terrain à des valeurs aléatoires. La valeur du point central
est déterminée par la moyenne des quatres coins plus un nombre
aléatoire. Le nombre aléatoire est multiplié par la
taille du carré de façon à ce que les grandes distances
aient de grandes variations. Finalement l'algorithme divise le carré
en quatre quarts et continue récursivement sur chacun d'entre eux.
Aléatoire
Génère un nouveau terrain en utilisant
un algorithme choisi au hasard. La taille du terrain sera de 400 x 400
pixels.
Fusionner deux ou plusieurs terrains
[A rédiger]
Le dialogue des Options globales
[A rédiger]
La fenêtre du terrain
[A rédiger]
Vues
[A rédiger]
Rendu
[A rédiger]
Le dialogue des Options de rendu
[A rédiger]
Rendu avec POV-Ray
[A rédiger]
Transformations de base du terrain
[A rédiger]
Inversion
Inverse le terrain courant, laisse le niveau de l'eau
l&e {
if (!p_myDialog)
p_myDialog= new TFDialogMyDialog (p_HF, p_HFD);
p_myDialog->show ();
}
else
7: Ajouter un nouveau générateur de terrain
Actuellement Terraform supporte deux générateurs de terrain
différents, le générateur de synthèse spectrale
et le générateur de subdivision. Pour ajouter un nouveau
générateur de terrain, faites ce qui suit :
-
Créez une classe pour encapsuler votre générateur.
-
Votre classe doit supporter une méthode, generate() en plus d'un
constructeur et destructeur. Le constructeur recevra à pointeur
HeightField que vous devrez enregistrer pour l'utiliser dans votre fonction
génératrice. Votre fonction génératrice devra
établir les membres de terrain d_xsize, d_ysize, et d_size (souvebez
vous que, d_size est toujours équale à d_xsize*d_ysize)
, et créez un tableau de PTYPEs de d_size (par exmeple myarray =
new PTYPE[d_size];). Remplissez ce tableau avec des valeurs entre 0.0 à
1.0 par quoi que ce soit que vous voulez, ensuite assignez le membre de
terrain d_hf à votre tableau (par exemple d_hf = myarray;).
-
Patchez votre générateur dans HeightFieldGenRandom.{h,cc}
-
La classe HeightFieldGenRandom choisit simplement aléatoirement
parmi les autres générateurs de terrain. Ainsi, vous devez
renseigner HeightFieldGenRandom sur votre nouveau générateur
de tel façon à ce qu'il soit disponible lorsque l'utilisateur
choisit de générer un terran aléatoire.
-
Ajoutez votre générateur à la liste du sous-menu Fichier
> Nouveau des générateurs de terrain.
-
Vous devrez modifier MenuDefs.h, et TFWindowMain.*. Si votre générateur
de terrain est suffisamment complexe pour requérir des données
de l'utilisatuer, vous aurez aussi besoin d'ajouter une paire de fichiers
TFDialogGen*.{h.cc} pour implémenter une boîte de dialogue
pour que l'utilisateur puisse choisir les paramètres pour votre
générateur de terrain. Voyez TFDialogGenSubdiv.* pour un
bon exemple sur comment faire celà. Pour les générateurs
de terrain qui nécessitent une boîte de dialogue, cette boîte
de dialogue sera responsable pour créer un nouvel objet de votre
classe génératrice, obtenir les paramètres de l'utilisatuer,
et passer ces paramètres à votre fonction génératrice.
Si votre générateur est suffisamment simple pour ne pas avoir
besoin de paramères, le code que vous allez ajouter à TFWindowMain
pour implémenter votre sous-menu Fichier > Nouveau devra créer
le nouvel objet générateur et appeler sa fonction génératrice.
8: Support de déboguage
Heureusement pour vous, Terraform vient avec des mécanismes de déboguage
assez robustes déjà mis en place. Premièrement, la
classe GlobalTrace vous permet de régler ( et contrôler )
différents niveaux de sortie de traçages, pour vous donner
un contrôle facile sur la quantité d'informations de déboguage
que votre code génère. Cette classe contient aussi la méthode
trace(), qui écrit vers la sortie standard si le niveau de déboguage
correspond au niveau spécifié dans l'appel à trace().
Ensuite, la classe GlobalSanityCheck fournit des facilités pour
que certaines conditions restent vraies et envoie ou imprime un signal
si ce n'est pas le cas. GlobalSanityCheck devrait être utilisée
pour vérifier la validité des hypothèses que votre
code fait avant de tourner. En fait, tandis que vous naviguez à
travers le code source de Terraform, vous trouverez des appels à
GlobalSanityCheck::warning et GlobalSanityCheck::bailout dans les premières
lignes de beaucoup de fonctions.
Finallement, comme une dernière ligne de défense, Terraform
implémente les manipulations des exceptions, pour intercepter
les différentes erreurs qui vont planter le programme et donner
à l'utilisateur les choix sur quoi faire ensuite. Vous ne
devriez pas à faire quoi que ce soit de spécial pour pouvoir
utiliser cette fonctionnalité, bien que si votre code provoque
beaucoup de 'core dumps', vous pourriez bien devenir familier avec le support
des manipulations d'exceptions de Terraform. Si vous voulez utiliser cette
manipulation d'exceptions incluse, vous devez lancer ./configure --enable-debug
pour valider le code de manipulation d'exceptions.
Si vous compilez votre propre exécutable en tout cas, vous pourriez
juste vouloir recompiler avec l'argument -g et ensuite utiliser gdb. Je
préfère celà plutôt que d'utiliser le support
de déboguage.
9: Soumettre vos changements
Une fois que vous avez implémenté toutes vos modifications,
que vous les avez validez dans la version la plus récente de Terraform,
et débogué votre travail, vous devriez soumettre votre nouveau
code à la Terraform
Mailing List. De cette façon les utilisateurs peuvent voir et
commenter votre code, et RNG peut, s'il le trouve valable, ajouter votre
code à la distribution principale de Terraform. Voici une façon
de faire celà, en utilisant tcsh, Il y a plein d'autres façons
bien sûr :
-
Faites un fichier tar gzippé (.tgz) contenant les diifs entre chaque
fichier changé et la version originale de ces fichiers. Notez qu'à
ce point ce serait opportun si vous gardiez une copie des fichiers originaux,
dans quelque autre fichier. Chaque fois que je modifie un fichier
source de Terraform, je le copie toujours par sécurité sous
le nom "original_nom.orig", comme dans "HeightFieldExport.cc.orig". Laissez-moi
dire encore qu'il est hautement recommandable que votre diffs soit fait
à partir de la version la plus récente du code source.
~/terraform-0.4.6/src/> foreach name (*.orig)
foreach? set oldname=`basename $name .orig`
foreach? diff $oldname $name > $oldname.diff
foreach? end
~/terraform-0.4.6/src/> cd ..
~/terraform-0.4.6/> tar -czf myusername.0.4.6.tgz src/*.diff
-
Uuencode le fichier .tgz :
~/terraform-0.4.6/> uuencode myusername.0.4.6.tgz myusername.0.4.6.tgz > myusername.0.4.6.uu
-
Postez vos changements à la terraform
mailing list:
~/terrafo