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