Table des matières

Format du terrain

Je me propose ici de vous donner une brève description du format utilisé par FlightGear (SimGear plus précisément) pour stocker le terrain.

Tout d'abord, les références des objets (le terrain n'est rien d'autre qu'un ensemble d'objets 3D) se trouvent dans les fichier STG du répertoire “Terrain” de la scène. Dans ce fichier, nous retrouvons une suite de définitions :

OBJECT_BASE

Chaque fichier est un objet SGBinObject. Il semblerait que TerraGear (le logiciel qui génère ces fichiers) n'utilise que des triangles fans pour le terrain de base.

Pour commencer, un fichier BTG possède un tableau de points (wgs84_nodes) définis par x, y et z et un tableau de coordonnées de texture (tex_coords) definis par u et v.

Chaque triangle fan est représenté dans un tableau (fans_v). Pour chaque fans_v, nous avons un tableau d'indexes correspondant aux points définis plus haut (wgs84_nodes). Nous aurons donc les triangles [0][0,1,2] [0][0,2,3] [0][0,3,4] etc.

Nous avons également les normales (?) dans le tableau fans_n correspondant aux fans_v (pour avoir la normale de fans_v[0][1], il suffit de récupérer fans_n[0][1]). Il doit donc y avoir autant de fans_v que de fans_n.

Ensuite, les coordonnées de texture dans fans_tc pointent vers le tableau tex_coords. C'est à dire que pour avoir les coordonnées de fans_v[0][1] nous allons prendre tex_coords[fans_tc[0][1]].

Puis les textures en elle-mêmes (qui sont des matériaux pour FlightGear, nous verrons après) dans fan_materials. Dans ce cas, une texture correspond à un triangle fan complet. Nous aurons donc le nom de la texture de fans_v[0] dans fan_materials[0].

Les matériaux

Tout le code de chargement du terrain se situe dans le dossier simgear/scene/tgdb des sources de SimGear, et plus particulièrement dans le fichier obj.cxx

Nous voyons qu'une texture n'en est pas vraiment une, c'est un matériau qui peut avoir plusieurs propriétés (définies dans le fichier materials.xml du répertoire data de FlightGear). Ainsi, il est possible de déclarer une texture couverte d'arbres, de maisons etc.