L’élément de base du fichier est la ligne. Le fichier se divise en blocs de type :

type_d’élément nom_de_l’élément {

... (contenu)

}

Le type d’élément vaut : material, mesh, shell, camera, coll.

Les blocs peuvent s’imbriquer (sauf les blocs ‘material’) :

shell x {

... (contenu)

mesh y {

... (contenu)

}

mesh z {

... (contenu)

camera w {

... (contenu)

}

}

}

Cette imbrication permet de rendre compte de la structure arborescente d’une scène.

Les blocs matériaux sont de la forme :

material nom_de_materiau {

color 123456

texture nom_de_texture.jpg

type NOLIGHT

type TRANSPARENCY120

}

Aucun des lignes n’est ici indispensable. Cependant, il va de soi qu’on doit définir au minimum une couleur de flat (ligne ‘color’) ou un fichier de texture (ligne ‘texture’).

La couleur est donnée en hexadécimal 6 digits RGB (8bits R, 8bits G, 8bits B). Par exemple, le rouge vif est codé ff0000.

La texture est un nom de fichier qui peut être précédé d’un filtre, placé entre ‘%’. Le filtre est une chaîne de caractères qui constitue une liste de traitements :

 

Exemple : %Cd0000080X%toto.jpg

Dans cet exemple, on appliquera à la texture toto.jpg un filtre rouge à 50% suivi d’une rotation de couleurs X.

Les lignes de types sont : NOLIGHT, TRANSPARENCY120. On peut mettre autant de lignes type qu’on le souhaite. Le coefficient qui suit le mot TRANSPARENCY vaut entre 0 (opaque) jusqu’à 255(transparent). Il n’est utile que lors d’un rendu non texturé.

Les blocs mesh sont de la forme :

mesh nom_du_mesh {

x y z a b c scale

vertices

[light l]

polygones

[récursivité]

}

La position du mesh est donnée par les coordonnées x, y, z et les angles a, b, c (angles compris entre 0 et 65535). Le paramètre scale est optionnel. Il est exprimé en pourcentage : 100 représente l’échelle normale. 200 pour une taille double, 50 pour une demi-taille, ...

Les vertices sont des lignes de trois coordonnées x, y, z entières.

La lumière l est facultative, et doit être comprise entre 0 (très sombre) et 31 (valeur utilisée par défaut).

Les polygônes sont décrits sous forme de blocs comprenant :

. une ligne donnant un nom de matériau à appliquer sur les polygônes à suivre

. des lignes de polygônes comprenant 3, 4, 6, 8, 9 ou 12 entiers, selon qu’on définit 3 ou 4 sommets, avec 0, 1 ou 2 coordonnées de textures.

A la suite des polygônes, il y a moyen d’insérer d’autres meshes, caméras ou fichiers include.

Les blocs caméra sont de la forme :

camera nom_de_camera {

x y z a b c scale

distx disty sx sy

zclip zbrouillard zback

}

La position de la caméra est donnée par les coordonnées x, y, z et les angles a, b, c (angles compris entre 0 et 65535). Le paramètre scale est optionnel.

Les paramètres distx et disty donnent la distance de l’écran sur l’axe x et sur l’axe y (utilisés dans les formules de projection X=distx*x/z et Y=disty*y/z)

Il est possible d’inclure des fichiers grace à des lignes de type :

include nom_de_fichier

On appelle Shell un objet vide (ni caméra, ni mesh) qui ne sert qu’à lui accrocher d’autres objets. La syntaxe d’un objet Shell est la suivante :

shell nom_de_shell {

x y z a b c scale

}

A la suite des coordonnées du shell, il y a moyen d’insérer d’autres meshes, caméras ou fichiers include.

 

Le caractère # indique que la suite de la ligne est un commentaire.

Exemple :

# cube

material wood {

color c04000

texture wood.jpg

}

material pierre {

color 00c040

texture pierre.jpg

type TRANSPARENCY

}

mesh cube {

0 0 0 0 0 0

-100 -100 -100

100 -100 -100

100 100 -100

-100 100 -100

-100 -100 100

100 -100 100

100 100 100

-100 100 100

light 10

wood

0 0 0 1 255 0 2 255 255 3 0 255

1 0 0 5 255 0 6 255 255 2 0 255

5 0 0 4 255 0 7 255 255 6 0 255

pierre

4 0 0 0 255 3 3 255 255 7 0 255

3 0 0 2 255 0 6 255 255 7 0 255

1 0 0 0 255 0 4 255 255 5 0 255

}

Dans cet exemple, on a défini un cube d’arète 200. Il y a trois faces qui utilisent le matériau ‘wood’ et trois faces qui utilisent le matériau ‘pierre’.


Copyright Cryo et Sylvain Huet 1