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 :
  1. 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.
  2. ~/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
  3. Uuencode le fichier .tgz :
  4. ~/terraform-0.4.6/> uuencode myusername.0.4.6.tgz myusername.0.4.6.tgz > myusername.0.4.6.uu
  5. Postez vos changements à la  terraform mailing list:
  6. ~/terrafo