Les informations présentes ci-dessous sont partiellement anciennes, les outils de génération de scène faisant l'objet de multiples changements en ce moment. Le Wiki international, dans sa partie “TerraGear”, est un peu plus récent sur ce point.

Construire les scènes

Introduction

Le “terrain” utilisé dans FlightGear, c'est à dire la surface de la terre au-dessus de laquelle vous volez, sa texture (en fonction de l'activité humaine : ville, champs) et ses caractéristiques naturelles : forêts, lacs, rivières, sont générées à partir d'un projet-soeur de FlightGear appelé Terragear. TerraGear est utilisé pour lire en entrée des données géographiques (élévation du terrain, texture terrestre, positionnement et topologie des aéroports, …) et générer en sortie un terrain au-dessus duquel il est possible de voler.

Il y a plusieurs raisons pour lesquelles vous pourriez souhaiter générer le terrain par vous-même, plutôt que d'utiliser les scènes téléchargeables dans FlightGear.

  • Par exemple, si vous utilisez Taxidraw pour modifier ou améliorer les informations concernant la topologie d'un aéroport (taxiways, aires de trafic), il serait agréable de visualiser la nouvelle apparence de cet aéroport dans votre simulateur avant de décider que vous êtes satisfait du résultat. Et normalement, pour visualiser et utiliser l'aéroport dans les scènes globales de FlightGear, il est nécessaire de soumettre les modifications à Robin Peel, de lui faire valider les modifications, qu'elles soient publiées dans le prochain fichier apt.dat officiel et ensuite d'attendre la prochaine version des scènes globales de FlightGear prenant en compte ces modifications; si vous pouvez construire le terrain par vous-même, vous pourrez l'utiliser tout de suite !
  • Peut-être que les scènes officielles sont trop détaillées pour votre machine un peu lente, et que vous souhaiteriez construire un terrain utilisant un modèle numérique d'altitude (digital elevation model, DEM) ayant une moins bonne résolution, pour diminuer le nombre de polygones générés et ainsi augmenter votre taux de rafraîchissement d'image. Ou peut-être disposez-vous d'une machine ultra-rapide et souhaiteriez-vous à l'inverse construire votre propre terrain en utilisant des données vectorielles de meilleure résolution (vmap1, Tiger) pour obtenir un détail plus fin des routes ou des rivières.
  • Peut-être souhaiteriez-vous ajouter dans FlightGear des données qui ne sont pas incluses dans les scènes par défaut, comme certaines rivières ou routes.
  • Enfin, peut-être avez-vous une faible bande passante, et préféreriez-vous ainsi télécharger les données géographiques une fois pour toutes et les compiler localement plutôt que de télécharger de grandes tuiles de données à chaque fois que celles-ci sont regénérées.

Pour toutes ces raisons, apprendre comment utiliser TerraGear est une bonne idée.

Il existe de la documentation pour TerraGear (en anglais) à au moins quatre endroits :

  • dans le code source de TerraGear lorsque vous le récupérez,
  • sur le site web de TerraGear,
  • dans l'arbre CVS du site Web,
  • sur le Wiki de FlightGear (dont s'inspire largement ce billet qui en est pour la plus grande partie une traduction),

Cette dernière source est la plus à jour et la documentation présente sur le site Web gagnerait vraiment à être mise à jour. Car, dans l'ensemble, ces versions sont toutes plus ou moins périmées d'une manière ou d'une autre. Lorsque j'ai essayé d'utiliser la documentation la plus récente pour utiliser TerraGear, j'ai rencontré toutes sortes de problèmes : j'ai réussi à en solutionner quelques uns, pour d'autres, j'ai reçu de l'aide).

Ce billet a dont pour but de détailler ce que j'ai dû faire avec Terragear pour créer mes scènes. Je n'essaye pas de réécrire la documention; ceci devrait être simplement considéré comme un ajout, un supplément aux documentations Terragear. Les documentations peuvent parfois vous guider dans la mauvaise direction ou vous faire oublier quelque chose. Ceci est mon effort pour essayer de corriger ces imperfections.

Je vais donc décrire ici ce que vous devrez faire pour avoir un TerraGear fonctionnel, et comment l'utiliser pour générer un terrain pour une zone particulière. Cependant, attention, j'utilise GNU/Linux, donc cette description se limitera à GNU/Linux. J'espère que les instructions seront identiques pour d'autres systèmes d'exploitation, mais je n'ai pas pu le tester. En particulier, je n'ai pas d'accès facile à une machine Windows, donc je ne sais pas si ce que j'avance diffère des instructions pour Windows. En fait, je ne sais même pas si TerraGear peut être utilisé/compilé sous Windows. J'espère donc qu'il fonctionnera à l'identique, et que les conditions ne seront pas trop différentes de celles précisées ici. Sinon, j'espère qu'un utilisateur Windows pourra éditer cette page et qu'il clarifiera si possible la manière de faire.

Ce tutoriel vous propose donc la construction pas à pas de la tuile w010n40, qui comprend (parmi d'autres villes) Caen, Nantes et Brest. J'ai dû reconstruire cette tuile pour visualiser les résultats de mes modifications sur les aéroports de Morlaix, Landivisiau, Brest, Ouessant, Lanvéoc et Quimper. A la fin du processus, vous obtiendrez une zone de 10°x10° avec ses aéroports, lacs, la texture de la terre (et ses caractéristiques), routes, voies ferrées et autres rivières et cours d'eau. Vous pourrez facilement adapter ce tutoriel pour créer des scènes n'importe où dans le monde. Toutes les données citées ont une couverture mondiale, et fonctionneront correctement que ce soit pour le Tibet, la Nouvelle Guinée ou le fin fond de la Bretagne !

Dans certains cas, des données de meilleure qualité (c'est à dire de meilleure résolution) sont disponibles pour les Etats-Unis mais pas pour le reste du monde. Ce tutoriel se base sur les jeux de données qui couvrent le monde entier, mais fait parfois référence aux jeux de données US de meilleure résolution pour ceux qui le souhaiteraien

Compiler Terragear

TerraGear dépend d'autres librairies qui vous seront nécessaires pour la compilation. Mais commencez par ceci :

  • créez un répertoire “terragear”
  • récupérez la version CVS de Terragear (mot de passe “guest”)
sudo mkdir /usr/local/src/terragear
cd /usr/local/src/terragear
cvs -d :pserver:cvs@cvs.terragear.org:/var/cvs/TerraGear-0.0 login
cvs -d :pserver:cvs@cvs.terragear.org:/var/cvs/TerraGear-0.0 co source

Si vous regardez dans /usr/local/src/terragear/source/, vous verrez un certain nombre de fichiers README. Lisez-les. En particulier, notez ceux avec des noms comme ”README.nomdulogiciel”. Ils décrivent en effet des logiciels qui vous seront nécessaires pour compiler et faire tourner TerraGear. Si vous utilisez la version CVS de FlightGear, alors vous avez déjà certainement plib et SimGear dans leur version CVS. Dans tous les cas, c'est une bonne idée de les mettre à jour vers leur version CVS actuelle, juste au cas où la version CVS actuelle de TerraGear dépendrait de quelque chose qui aurait été ajouté dans plib ou SimGear depuis votre dernière mise à jour (oui, cela signifie aussi que vous devrez faire une mise à jour et une nouvelle compilation de FlightGear, désolé !). Si toutefois vous ne cherchez pas à avoir la dernière version CVS, vous pouvez toujours essayer de compiler TerraGear avec les version de SimGear et plib que vous avez installé. Mais si vous rencontrez des problèmes (comme des “unresolved symbols” par exemple), une bonne mise à jour des versions CVS serait la première chose que je ferais.

Quelques commentaires sur les librairies dont vous aurez besoin :

  • GPC : les instructions pour GPC sont précisées dans source/README.gpc. Ce fichier dit que la version actuelle est la 3.21; en fait, il s'agit de la 3.22. N'oubliez pas l'étape d'édition décrite dans le fichier README. Puis, quand vous lancerez le make, il créera une librairie appelée libgenpolyclip.a que votre make install installera dans /usr/local/lib/ par défaut ou à l'emplacement que vous préciserez.
  • GTS : je n'ai pas eu à compiler GTS. J'utilise Debian et je l'ai obtenu en installant les paquetages Debian libgts-0.7-1 et libgts-dev. Les deux paquetages sont en version 0.7.3-2 à l'heure où j'écris. Je n'ai donc pas de commentaire à apporter sur les instructions présentes dans le fichiers source/README.gts.
  • newmat : c'est a priori un outil de manipulation de matrice. Le fichier source/README.newmat vous dit quoi faire, mis à part qu'il vous oriente vers la mauvaise page (une page d'information) au lieu de la page directe de téléchargement. Une fois sur la page d'information, il vous faudra donc cliquer sur le lien “to home page” en haut, puis sur le lien “Downloads”. Vous y trouverez les liens pour télécharger newmat (j'ai téléchargé la version actuelle : newmat11). Une fois que vous l'avez obtenue, suivez les instructions pas à pas décrites dans le fichier source/README.newmat.
  • nurbs++.

Une fois ces prérequis installés, vous pouvez continuer par la configuration de la configuration de Terragear, puis par sa compilation à proprement parler. La page “Resources” du CVS de Terrager qui vous a dit comment récupérer la version CVS de Terragear vous dit aussi comment la compiler : lancer un autogen.sh, puis ./configure, et enfin les classiques make et make install. Cependant, avant tout, le script autogen.sh provenant du CVS n'est pas exécutable. Donc vous devrez d'abord le rendre exécutable en faisant un chmod +x autogen.sh.

Ensuite, quand vous lancez le ./configure, ce script prend comme arguments les emplacements des différentes librairies nécessaires à la compilation. Je ne sais pas quelle est la valeur par défaut de ces arguments, mais pour exemple, si les librairies ont été installées dans /usr/local/lib (c'est le cas par défaut si vous n'avez pas précisé une autre destination, vous pourrez lancer un ./configure comme celui ci :

$ ./configure - with-gts=/usr/local/lib/ \
  --with-gpc=/usr/local/lib/ \
  --with-newmat=/usr/local/lib/ \
  --with-plib=/usr/local/lib/ \
  --with-simgear=/usr/local/lib/

Ensuite vient le moment de compiler tous les exécutables. Les instructions dans source/README précisent que vous voulez compiler le code /Libs/TriangleJRS sans optimisation (-O2). Cependant, le chemin vers ces fichiers n'est pas correct. Allez dans le répertoire source/src/Lib/TriangleJRS. Là, éditez le fichier Makefile et supprimez les deux occurrences de -O2 (aux lignes CFLAGSet CXXFLAGS).

A ce point, vous êtes prêts à lancer le make et le make install. Sauf si vous avez précisé une option lors du ./configure pour spécifier que TerraGear doit être installé ailleurs que dans /usr/local, vous aurez besoin d'être root pour réussir votre make install.

Je n'ai pas rencontré de problème en suivant cette manière de faire. Tout s'est bien compilé et a été installé correctement. Mais cela a été la partie la plus simple de l'expérience TerraGear !

Télécharger les jeux de données

TerraGear génère les scènes de FlightGear automatiquement à partir de jeux de données gratuits et librement disponibles : vous n'avez pas besoin (et ne pouvez actuellement pas) définir les rivières, les routes… à la main.

Nous utiliserons deux types de jeux de données géographiques dans ce tutoriel :

  • Des données Raster pour les points d'élévation. Ces données donnent une une grille à deux dimensions de points répartis de manière homogène et contenant les données d'altitude du sol. TerraGear utilisera ces données pour créer les collines, vallées et le terrain de manière générale. Sans elles, le monde entier serait au niveau de la mer.
  • Des données vectorielles pour les polygones à la surface de la terre. Ces données contiennent des lignes (comme les routes et les et les pistes) et les polygones (commes les villes ou les lacs) qui seront rendus comme des polygones texturés au dessus de la grille d'altitude; sans elles, le monde entier aurait exactement la même surface.

Voici les données géographiques qu'il vous faudra télécharger :

Données d'élévation de terrain

SRTM de 3-arsec

ftp://e0srp01u.ecs.nasa.gov/srtm/version2/SRTM3/

Ces données sont les plus précises disponibles pour le monde entier. Pour l'Europe, choisissez Eurasia, puis la zone que vous voulez créer. Ce sont des zones de 1°x1°, pour Brest vous prendrez donc N48W005.hgt.zip et pour Caen N49W001.hgt.zip.

Ce fichier contient les données géographiques d'altitude, ce qui permet de ne pas faire une scène au niveau de la mer et avec du relief.

DEM de 30-arcsec (déconseillé)

ftp://edcftp.cr.usgs.gov/pub/data/gtopo30/global/w020n90.tar.gz (8,4 Mo).

Ce fichier contient toutes les données d'élévation nécessaires pour le fragment de scène concerné (ainsi que d'autres avoisinants). Si vous créez une scène pour une autre région, allez à l'adresse http://edcdaac.usgs.gov/gtopo30/gtopo30.html et cliquez sur le rectangle approprié de la mappemonde pour obtenir vos données.

Ces modèles numériques d'altitude (DEM) ont approximativement un point chaque kilomètre. Donc les éléments (vallées, collines, gorges…) plus petites qu'un kilomètre d'apparaîtront pas. Des modèles de meilleure résolution sont disponibles pour les Etats-unis à l'adresse http://edc.usgs.gov/geodata/. Pour le reste du monde, il y a les SRTM-3, 10 fois plus précis.

Aéroports et topologie aéroportuaire

FG_ROOT/Airports/apt.dat.gz

Si vous avez déjà FlightGear installé sur votre machine, ce fichier sera présent dans le répertoire Airports/ de votre paquetage de base (fgfs-base), vous n'avez donc pas besoin de télécharger quoi que ce soit. Si vous une raison ou une autre, vous n'avez pas une copie du paquetage de base de FlightGear déjà installé, vous pouvez en télécharger une à partir de l'adresse http://rockfish.net/fg/ (c'est un peu beaucoup pour un seul fichier).

Vous devrez éditer ce fichier pour ajouter de nouveaux aéroports ou modifier des aéroports existants. Pour une description compète du format, voir le fichier docs-mini/AptNavFAQ.FlightGear.html dans la distribution du code source de FlightGear (et non dans le paquetage de base).

vmap0

Télécharger le fichier http://geoengine.nima.mil/ftpdir/archive/vpf_data/v0eur.tar.gz (Europe et Asie du Nord, 239,6 Mo).

Ce jeu de données (connu auparavant sous le nom de carte numérique mondiale (DCW, Digital Chart of the World)) contient les données vectorielles (hors aéroports) pour toute l'Europe et l'Asie, dont les limites terrestres (le trait de côte), les lacs, rivières, villes et villages, routes, voies ferrées, rivières et données de surface, ainsi que beaucoup d'autres informations que nous n'utilisons pas encore. Après avoir décompressé le fichier, vous pouvez si vous préférez le graver sur un CD-ROM et travailler à partir de celui-ci. Si vous créez une scène en-dehors de la zone couverte par ce vmap, vous devrez télécharger l'une des trois autres couvertures VMAP0 à la place :

Il existe d'autres données vectorielles de meilleure résolution disponibles pour les Etats-Unis, dont :

  • le Digital Line Graphs (DLG) à l'adresse http://edc.usgs.gov/geodata/.
  • les données http://www.soest.hawaii.edu/wessel/gshhs/gshhs.html qui ont une définition du trait de côte bien meilleure que le vmap0, mais pour lesquelles la définition des lacs et cours d'eau est très imprécise. Les côtes des grands lacs, par exemple, sont parfois décalées de plusieurs kilomètres, positionnant les aéroports au milieu de l'eau.

vmap1, une version d'une résolution bien supérieure à vmap0, est également disponible à l'adresse http://geoengine.nima.mil/ pour quelques régions des Etats-Unis. Cependant, à l'heure de rédaction de ce document, TerraGear et FlightGear ne peuvent encore interpréter ces données, bien que ce soit tentant.

Préparer les jeux de données

Après avoir suivi les instructions précédentes, vous devriez avoir les trois fichiers de données suivants téléchargés sur votre ordinateur :

  • N48W005.hgt.zip ou w020n90.tar.gz (environ 8,4 Mo)
  • apt.dat.gz (environ 3,6 Mo)
  • v0eur.tar.gz (environ 145 Mo)

Avant d'aller plus loin, il vous faut créer un répertoire racine pour la création de vos scènes. A titre personnel, j'utilise /usr/local/src/Scenery/, mais vous pouvez paramétrer les choses comme vous le souhaitez. A l'intérieur de votre répertoire racine, créez deux sous-répertoires, /usr/local/src/Scenery/work/ et /usr/local/src/Scenery/data/ :

$ cd /usr/local/src/Scenery/
$ mkdir work
$ mkdir data

Préparer les données d'altitude

Avec les SRTM-3

Créez dans data un sous-répertoire SRTM2-Eurasia-3 pour y stocker vos données :

$ cd data
$ mkdir SRTM2-Eurasia-3
$ for i in data/SRTM2-Eurasia-3/N*.hgt.zip; do hgtchop 3 $i work/SRTM2-Eurasia-3/; done

hgtchop vous crée alors dans le répertoire de destination (work/SRTM2-Eurasia-3) tout votre lot de données d'altitude (dans notre cas, un répertoire w010n40, des sous-répertoires comme w004n48, contenant des fichiers .arr.gz).

Le prochain outil à utiliser est un script python appelé terrafit. Il est normalement placé dans le répertoire Terragear/src/Prep/TerraFit/ de votre aborescence source de Terragear. A partir de votre répertoire racine scène, créez un lien symbolique vers terrafit.py en lançant la commande :

$ ln -s ...Terragear/src/Prep/TerraFit/terrafit.py .

N'oubliez pas le . à la fin de la commande ci-dessus.

Terrafit va chercher ../Terra/terra qui a peu de chances d'exister. En général il est dans /usr/local/bin/terra. Nous allons donc l'éditer pour le faire chercher au bon endroit. Avec votre éditeur de texte favori, mettez /usr/local/bin/terra à la place de ../Terra/terra à la ligne 41.

Terrafit est un programme conçu pour améliorer les données d'élévation. Il offre de nombreuses options, mais pour l'instant nous le lancerons de la manière suivante :

$ ./terrafit.py -m 50 -x 3000 -e 2 work/SRTM2-Eurasia-3/

Avec les DEM-30 (déconseillé)

Dans le répertoire data, créez un sous-répertoire dem30 pour stocker les données DEM, puis allez dans ce répertoire dem30 pour y désarchiver et décompresser vos données :

$ cd data
$ mkdir dem30
$ cd dem30
$ tar xvzf ../../w020n90.tar.gz

Vous devriez vous retrouver avec quelque chose comme cela :

479814 56312 -rw-rw-r-- 1 olivier olivier 57600000 1997-04-11 19:50 W020N90.DEM
479815     4 -rw-rw-r-- 1 olivier olivier      222 1997-04-11 19:29 W020N90.DMW
479816    84 -rw-rw-r-- 1 olivier olivier    78561 1997-04-11 20:11 W020N90.GIF
479817     4 -rw-rw-r-- 1 olivier olivier      327 1997-04-11 19:30 W020N90.HDR
479818     4 -rw-rw-r-- 1 olivier olivier      648 1997-04-11 19:30 W020N90.PRJ
479819     4 -rw-rw-r-- 1 olivier olivier      326 1997-04-11 19:32 W020N90.SCH
479820 28160 -rw-rw-r-- 1 olivier olivier 28800000 1997-04-11 19:52 W020N90.SRC
479821     4 -rw-rw-r-- 1 olivier olivier       28 1997-04-11 19:46 W020N90.STX

Tout d'abord, nous devons convertir les données DEM de leur format actuel binaire vers le format ASCII que TerraGear peut gérer, en utilisant la commande raw2ascii de TerraGear (nous placerons les fichiers résultant dans le sous-répertoire ascii). Vous pouvez passer cette étape si vous utilisez les données DEM US 3 arcsec, car elles sont déjà au format ASCII.

$ mkdir ascii
$ raw2ascii W020N90 ascii

Ouf ! La conversion dure un moment et fini par créer 2000 fichiers dans le sous-répertoire ascii/, utilisant plus de 200 Mo d'espace disque. La bonne nouvelle c'est que vous pourrez les effacer bientôt. En fait, vous pouvez déjà effacer les 57 Mo des fichiers originaux, car vous n'en aurez plus besoin (vous pourriez cependant en conserver une copie de sauvegarde quelque part) :

Dans le répertoire dem30 :

$ rm W020N90*

Maintenant, si vous êtes certain (vraiment certain) que vous n'allez pas créer de scène en-dehors du fragment w020n90, vous pouvez également supprimer tous les fichiers du modèle numérique d'altitude inutiles.

Bien, maintenant il est temps de hacher les fichiers DEM en segments pour les utiliser avec TerraGear. Allez dans le répertoire racine de votre scène (dans notre exemple /usr/local/src/Scenery/ puis créez-y un répertoire work/DEM-30/ pour stocker les données DEM “prédigérées” (si vous utilisez les données DEM 3-arcsec pour les Etats-Unis, placez-les dans work/DEM-3).

$ mkdir work/DEM-30

Maintenant, la prochaine partie du traitement est un peu plus dépendante du système d'exploitation que les points précédents. Vous aurez besoin d'utiliser la commande demchop sur chacun des fichiers *.dem du répertoire data/dem30/ascii de manière séparée. En shell bash, j'utilise la commande suivante (cette commande se lance depuis le répertoire racine de votre nouvelle scène) :

$ for file in data/dem30/ascii/*.dem; do
demchop $file work/DEM-30
done

Le programme mouline pendant quelques minutes, puis vous trouverez un sous-répertoire w010n40/ dans le répertoire work/DEM-30/, contenant une centaine de sous-répertoires nommés w001n40 à w010n43 et utilisant environ 12 Mo d'espace disque.

Vous avez maintenant terminé la préparation des données d'élévation. Pour créer les scènes, TerraGear n'a besoin que des fichiers et répertoires sous le répertoire work/DEM-30/; si vous êtes limités en espace disque, vous pouvez supprimer maintenant tous vos fichiers de travail présents dans data/ avant d'aller plus loin (à l'inverse, si vous avez beaucoup d'espace, cela ne mange pas de pain de les conserver).

Préparer les données des aéroports

Notez que vous devez préparer les données d'altitude avant de préparer les données des aéroports, et que ces données doivent êtres présentes dans un répertoire nommé DEM-30 ou DEM-3; sinon, tous les aéroports seront créés au niveau de la mer et apparaîtront dans d'énormes trous dans vos scènes.

Même si vous avez déjà une copie du fichier apt.dat.gz sur votre disque dur dans le paquetage de base de FlightGear, en faire une copie séparée pour la génération des scènes est une bonne idée. Ainsi, vous pourrez créer des modifications locales sans casser quoi que ce soit dans les fichiers dont vous avez besoin pour faire tourner FlightGear.

A partir du répertoire racine de vos scènes, changez de répertoire vers data/ et créez un nouveau sous-répertoire appelé airports/, et copiez-y votre fichier apt.dat.gz :

$ cd data
$ mkdir airports
$ cp $FG_ROOT/Airports/apt.dat.gz airports/

Puis déplacez-vous dans le répertoire airports et créez l'ensemble de vos données d'aéroport en une seule instance de la commande genapts de TerraGear (en théorie) :

$ cd airports
$ genapts --input=apt.dat.gz --work=../../work/ --min-lon=0 --max-lon=-5 --min-lat=44 --max-lat=49 (par exemple)

En pratique, la version actuelle de genapts ne comprend pas les arguments –min-lon ou –max-lon. Deux possibilités : soit vous ne laissez dans le apt.dat.gz que les aéroports qui vous intéressent, soit vous précisez dans la commande genapts (qui à la faire plusieurs fois à la suite) le ou les aéroports qui vous intéressent (avec leur identifiant OACI en majuscules).

Lorsque la commande se termine, vous devriez obtenir deux nouveaux répertoires à l'intérieur de work/ : AirportArea et AirportObject. Ensemble, ils représentent une taille d'un peu moins de 9 Mo (peut-être un peu plus pour les systèmes avec des blocs de données de taille fixe et grande). C'est tout ce qui est nécessaire pour la création des aéroports.

Si un jour vous avez besoin de remplacer un aéroport, la manière la plus simple est de supprimer tous les aéroports du fragment concerné et de les reconstruire. Par exemple, si vous avez modifié les entrées de l'aéroport LFRU (Morlaix), vous feriez :

$ rm -rf work/AirportArea/w010n40/
$ rm -rf work/AirportObj/w010n40/

Et ensuite répéteriez les instructions ci-dessus. Il est possible de remplacer les fichiers individuels, mais cela devient assez compliqué et ce n'est pas une bonne idée pour de nouveaux utilisateurs.

Préparer les données vmap0

Vous devriez d'ores et déjà avoir décompressé le fichier v0eur.tar.gz dans un répertoire sur votre disque dur, ou l'avoir gravé sur un CD. Si vous ne l'avez pas encore fait, alors il est temps de le positionner dans un répertoire qu'il faudra appeler data/vmap0/ (toujours à partir de la racine de vos nouvelles scènes). Où que soit ces données vmap, localisez le répertoire nommé vmaplv0 et contenant les fichiers dht et lat : il s'agit de votre racine vmap0 à laquelle nous ferons référence tout au long de ce paragraphe. Tous les exemples suivants utiliseront /usr/local/src/Scenery/data/vmap0/vmaplv0 comme racine de votre vmap, donc vous devrez peut-être l'adapter à votre propre arborescence.

Le programme tgvpf de TerraGear extrait les données d'un vmap0 et les place dans des répertoires de travail pour la génération des scènes. Vous lancez donc le programme une fois pour chaque type de donnée que vous souhaitez extraire. En fonction de la quantité de données, cela peut prendre plusieurs minutes par type pour mener à bien l'extraction.

Nous commencerons par la surface terrestre basique (c'est à dire tout ce qui n'est pas l'océan) :

NOTE : cet exemple ainsi que les suivants partent du principe que vous construisez les scènes pour w010n40 à partir des données du vmap0 eurnasia. Si ce n'est pas le cas, remplacez eurnasia par ses petits frères (sasaus, soamafr ou noamer) pour chacun de ces exemples (regardez dans le répertoire vmaplv0/ de vos données vmap si vous avez un doute sur celui à utiliser), et n'oubliez pas également de remplacer w010n40 par le fragment que vous souhaitez utiliser.

$ cd work
$ tgvpf --chunk=w010n40 --work-dir=LandMass --material=Default ../data/vmap0/vmaplv0 eurnasia bnd polbnda

Cette commande crée un sous-répertoire LandMass/ contenant les polygones pour toutes les surfaces non océaniques, pour être sûr qu'au moins de la terre apparaisse même lorsque d'autres types de surfaces (champs, …) ne sont pas disponibles.

Si vous êtes impatient de voir si cela a fonctionné, vous pouvez passer à la section suivante dès maintenant et essayer de construire les scènes. Notez cependant que vous n'aurez que les océans, une surface terrestre avec des forêts et les aéroports.

Ensuite, nous allons ajouter les lacs intérieurs et les grandes rivières, histoire de diversifier un peu le paysage :

$ tgvpf --chunk=w010n40 --work-dir=Lakes --material=Lake ../data/vmap0/vmaplv0 eurnasia hydro inwatera

Ces polygones seront placés dans un répertoire séparé, appelé Lakes/. Nous pourrions placer toutes les polygones vmap dans le même répertoire, mais en les séparant, il sera plus facile de régénérer un type de données sans avoir à tous les régénérer.

Ensuite, ajoutons quelques rivières plus étroites et des cours d'eau. vmap0 n'utilisant que des lignes pour les localiser, nous utiliserons une largeur standard, par exemple 50 m :

$ tgvpf --chunk=w010n40 --work-dir=Rivers --material=Stream --width=50 ../data/vmap0/vmaplv0 eurnasia hydro watrcrsl

Cette commande ajoute les polygones pour les villes et villages importants :

$ tgvpf --chunk=w010n40 --work-dir=Cities --material=Urban ../data/vmap0/vmaplv0 eurnasia pop builtupa

vmap0 considère les petites villes uniquement comme des points, donc nous utiliserons des carrés par défaut de 1×1 km pour les représenter :

$ tgvpf --chunk=w010n40 --work-dir=Towns --material=Town ../data/vmap0/vmaplv0 eurnasia pop mispopp

Les deux commandes suivantes ajoutent des forêts de base et des zones agricoles :

$ tgvpf --chunk=w010n40 --work-dir=Forest --material=MixedForestCover ../data/vmap0/vmaplv0 eurnasia veg treesa
$ tgvpf --chunk=w010n40 --work-dir=Crops --material=MixedCropPastureCover ../data/vmap0/vmaplv0 eurnasia veg cropa

Enfin, les trois dernières commandes utilisent les données linéaires de vmap0 pour créer des autoroutes (50 m de large), des routes nationales (20 m de large) et les voies ferrées (10 m de llarge) :

$ tgvpf --chunk=w010n40 --width=50m --work-dir=Freeways \
        --material=Freeway --att=med:1 ../data/vmap0/vmaplv0 eurnasia trans roadl
 
$ tgvpf --chunk=w010n40 --width=20m --work-dir=Roads \
        --material=Road '--att=!med:1' ../data/vmap0/vmaplv0 eurnasia trans roadl
 
$ tgvpf --chunk=w010n40 --width=10m --work-dir=Railroads \
        --material=Railroad ../data/vmap0/vmaplv0 eurnasia trans railrdl

Notez que c'est juste un début. Il y a en fait beaucoup plus d'informations disponibles dans les données vmap0, et une fois que vous vous sentirez à l'aise avec la construction de scènes, vous pourrez distinguer les différents types de cours d'eaux, de zones agricoles, de forêts, etc… et également ajouter de nouvelles zones de couverture, comme la toundra, les zones polaires, les marécages. Quand vous serez prêts, jetez un oeil à http://www.terragear.org/docs/vmap0 pour avoir une documentation complète sur la commande tgvpf et à http://www.terragear.org/docs/vmap0/coverage.html pour obtenir plus de détails sur les couvertures du vmap0 et ses attributs.

Maintenant, il est temps cependant de construire nos données de scène FlightGear.

Générer les scènes

Après avoir créé vos fichiers de travail pour l'altitude, les aéroports et la couverture de la zone en vmap, vous devriez obtenir les sous-répertoires suivants dans votre répertoire racine de scène work/ :

  • AirportArea
  • AirportObj
  • Cities
  • Crops
  • DEM-30 (ou SRTM2-Eurasia-3)
  • Forest
  • Freeways
  • Lakes
  • LandMass
  • Railroads
  • Rivers
  • Roads
  • Towns

(Sur mon système, cet ensemble représente environ 265 Mo d'espace disque; si vous utilisez un système de fichiers qui utilise des blocs de taille fixe et large, alors l'espace disque utilisé peut être plus important en raison de la quantité de petits fichiers utilisés).

Lorsque vous construisez votre scène, vous pouvez décider d'inclure ou d'exclure chacun de ces répertoires de manière séparée. Pour l'instant, nous les utiliserons tous.

Avant de démarrer la génération de la scène, nous devrons aller dans votre répertoire de travail et créer un sous-répertoire Status/ et y positionner un fichier vide appelé MASTER_ON :

$ cd work
$ mkdir Status
$ touch Status/MASTER_ON

Maintenant, nous sommes prêts à bientôt créer la scène w010n40. Nous utiliserons deux programmes pour générer la scène : fgfs-tools-server, qui contrôle le processus global de création, et fgfs-tools-client, qui effectue la construction de la tuile à proprement parler. Tout d'abord, à partir de votre répertoire de travail, démarrez fgfs-tools-server (dans le cas restrictif) :

$ fgfs-tools-server . . w004n48

Lorsque le programme démarre, il vous informe de la manière suivante :

Work base: .
Output base: .
Area width: 10 degrees
Area height: 10 degrees
lons = w010 lats = n40
start_lon = -10  start_lat = 40
socket is connected to port = 33933

La dernière ligne est la plus importante : vous devez savoir sur quel port le serveur s'est placé en écoute avant de pouvoir démarrer un client (le port sera différent à chaque démarrage de fgfs-tools-server).

Maintenant, dans une fenêtre terminal séparée, placez-vous dans le répertoire work et lancez une instance de fgfs-tools-client pour générer les tuiles de scène (remplacez “33933” par le port sur lequel fgfs-tools-server est en écoute et qui vous a été précisé ci-dessus) :

$ fgfs-tools-client --rude \
                    --output-dir=. \
                    --work-dir=. \
                    --port=33933 \
                    SRTM2-Eurasia-3 LandMass AirportArea AirportObj \
                    Cities Crops Forest Freeways Lakes Railroads Rivers Roads Towns

Si vous travaillez sur une machine multiprocesseurs, vous pouvez lancer des instances complémentaires de fgfs-tools-client dans des fenêtres séparées en utilisant la même ligne de commande. fgfs-tools-server répartira alors le travail sur ces différentes instances.

Si vous ne souhaitez travailler que sur une tuile, alors ne mettez que cette tuile dans votre répertoire SRTM2-Eurasia-3, sinon le programme essaiera de compiler des tuiles qu'il ne trouvera pas forcément.

Cela prendra un certain temps à TerraGear de compiler la scène, peut-être une heure ou deux, en fonction de la charge de votre système, de la vitesse de votre processeur et de la rapidité de votre disque. Prenez une pause (bien méritée) jusqu'à ce que la compilation soit terminée.

En cas de problème, le serveur écrit des informations dans /tmp/result.nom_de_la_machine.id. Cela peut être pratique pour trouver l'origine du problème.

Une fois le travail terminé, fgfs-tools-server sera toujours lancé (vous devrez tuer le processus manuellement), mais fgfs-tools-client sera terminé. Dans Scenery/, vous devriez trouver un sous-répertoire w010n40/ contenant votre nouvelle scène. Essayons-donc la scène en utilisant le mode tapis volant à LFRU (Morlaix), en restant dans votre répertoire work/ :

$ FG_SCENERY=./Scenery fgfs --fdm=magic --disable-panel --airport-id=LFRU

Notez que vous démarrerez légèrement sous le niveau du sol, mais dès que vous aurez pris un peu d'altitude, vous verrez la scène correctement.

Si votre scène apparait correctement, alors vous avez réussi votre première compilation de scène, bravo !

Installer la scène

Vous pouvez positionner la scène où vous le voulez, à partir du moment où vous pointez dessus avec votre variable d'environnement FG_SCENERY. Par défaut, FlightGear cherchera les scènes dans $FG_ROOT/Scenery/ - si vous copiez le répertoire w010n40 de work/Scenery/ vers ce répertoire, la scène apparaitra au prochain démarrage de FlightGear.

Si vous avez fait des modifications au fichier par défaut apt.tar.gz et que vous voulez que FlightGear soit au courant de cette modification (par exemple, pour modifier l'aéroport de démarrage ou la vue de la tour de contrôle), il vous faudra faire une petite installation supplémentaire. Faites une copie de sauvegarde de votre $FG_ROOT/Airports/apt.dat.gz, puis copiez votre version modifiée à la place. Ensuite, allez dans le répertoire $FG_ROOT/Airports/ et lancez les commandes suivantes à partir de votre arborescence source de FlightGear (remplacez /usr/local/src/flightgear-cvs/ par le préfixe correspondant à votre arborescence) :

$ rm -f simple.mk4
$ /usr/local/src/flightgear-cvs/src/Airports/gensimple apt.dat.gz simple.mk4
rm -f runways.mk4
$ /usr/local/src/flightgear-cvs/src/Airports/genrunways apt.dat.gz runways.mk4

C'est terminé ! Félicitations pour la construction de votre première scène FlightGear, et n'hésitez pas à expérimenter, tout spécialement en ajoutant des aéroports et en améliorant ceux qui existent, ou en extrayant des informations plus détaillées du vmap0.

Si vous souhaitez ajouter des bâtiments ou d'autres objets statiques ou partagés, intéressez-vous à Blender, à Google Sketchup, à la base de données Scenemodels ou essayez de travailler manuellement à partir des instructions présentes dans docs/Model/fgfs-model-howto.html dans la distribution source de FlightGear. Ajouter des objets partagés est, notamment, à la portée d'un enfant. Donc n'hésitez plus.

N.d.T : Merci à Guillaume pour son aide.

 
devel/construire_les_scenes.txt · Dernière modification: 2012/08/03 14:53 par f-ojac
 
Recent changes RSS feed GNU General Public License Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki