|
Contenus
↷ 1. Aperçu général
↷ 2. Syntaxe
↷ 3. Commandes disponibles
↷ [MeshBuilder]
↷ Vertex
↷ Face
↷ Face2
↷ Cube
↷ Cylinder
↷ Translate, TranslateAll
↷ Scale, ScaleAll
↷ Rotate, RotateAll
↷ Shear, ShearAll
↷ Color
↷ EmissiveColor
↷ BlendMode
↷ Load
↷ Transparent
↷ Coordinates
|
|
1. Aperçu général
Un objet B3D permet de créer un seul objet par l'utilisation d'instructions textuelles.
L'objet peut être utilisé pour les routes ou pour les trains. L'objet décrit par le fichier peut contenir
n'importe quel nombre de polygones individuels. Le format de fichier permet de regrouper
des polygones multiples dans les sections MeshBuilder dans lesquels on attribue
des informations de couleur ou de texture assigné à tous les polygones créés dans chaque section.
Ceci tient compte de la création de beaucoup de polygones dans la même section CreateMeshBuilder
qui partageront des attributs communs. Un polygone est appelé face (surface) dans ce format de fichier.
Le fichier est un fichier de texte simple codé dans un codage arbitraire, cependant,
UTF-8 avec une marque d'ordre d'octet est le choix préféré. Le modèle d'analyse des nombres est libre,
cependant, vous êtes encouragé à avoir une production néanmoins Stricte . Le nom de fichier est arbitraire,
mais doit avoir l'extension .b3d. Le fichier est interprété sur une base de ligne par ligne, du début à la fin.
Voir aussi la référence rapide pour le format de B3D... (lien en Anglais)
|
|
2. Syntaxe
Chaque ligne dans le fichier est composée par un nom d'une commande et ses arguments.
La syntaxe pour toute les commandes est la même :
NameOfTheCommand, Argument1, Argument2, Argument3, ..., Argumentn
NameOfTheCommand est casse insensible. S'il y a des arguments, NameOfTheCommand
et Argument1 sont séparé par une virgule (U+002C).
De la même manière, les arguments sont aussi séparés par une virgule (U+002C).
Les espaces blancs autour des arguments et autour de NameOfTheCommand, et ainsi qu'au début et
fin de ligne, seront ignorés. Les lignes vides ou les lignes consistant seulement en des espaces blancs
seront aussi ignorés.
Les arguments pourraient être aussi omis en partant du texte de chaque Argumenti vide.
Une valeur par défaut s'appliquera d'ordinaire dans ce cas, ce qui est spécifique à la commande utilisé.
Toutes les valeurs par défaut sont spécifiées dans la section de commandes disponibles.
Vous pouvez utiliser des commentaires n'importe où à la fin d'une ligne. Un commentaire est commencé
par un point virgule (U+003B). Les commentaires, si présent, sont sortis de toutes les lignes
avant que celle-ci soit traité.
|
|
3. Commandes disponibles
[MeshBuilder]
Cet commande indique le début d'une nouvelle section de surfaces.
Elle doit précéder n'importe laquelle des commandes suivantes.
Il peut y avoir autant de sections [MeshBuilder] que l'on désire dans le fichier objet.
Toutes les commandes suivantes seront reliées à la dernière section [MeshBuilder] ouverte.
|
|
Vertex, vX, vY, vZ, nX, nY, nZ
vX: Coordonnée X pour le sommet en mètres. Valeurs négatives pour la gauche,
positive pour la droite. La valeur par défaut est 0.
vY: Coordonnée Y pour le sommet en mètres. Valeur négative vers le bas,
positive vers le haut. La valeur par défaut est 0.
vZ: Coordonnée Z pour le sommet en mètres. Valeur négative vers l'arrière,
positive vers l'avant. La valeur par défaut est 0.
nX: Coordonnée X pour la normale de ce sommet. La valeur par défaut est 0.
nY: Coordonnée Y pour la normale de ce sommet. La valeur par défaut est 0.
nZ: Coordonnée Z pour la normale de ce sommet. La valeur par défaut est 0.
Cette commande crée un nouveau sommet qui peut être utilisé pour créer des surfaces
via la commande Face ou Face2. Il peut y avoir autant de commande Vertex
que désiré dans une section [MeshBuilder]. Toutefois, l'ordre donnés des sommets
est important pour les autres commandes. Le premier sommet donné a l'indice 0,
et les sommets suivants ont l'index 1, 2, 3 et ainsi de suite.
La normale est la direction perpendiculaire à la surface en un point particulier.
Si tous les sommets dans une surface ont la même normale, la surface paraîtra plate.
Si utilisé avec à-propos, vous pouvez donner l'illusion d'une surface courbe en spécifiant
différente normale par les sommets, mais en utilisant la même normale sur tous les sommets
qui partagent la même coordonnée spatiale - à travers les surfaces multiples.
Si elles sont toutes à zéro, la normale sera automatiquement calculé.
|
|
Face, v1, v2, v3, ..., vmax
vi: L'indice du sommet inclus dans la surface.
Les valeurs permises sont de 0 à n-1, où n est le nombre de commandes Vertex utilisé.
Cette commande crée une surface donné par une longue liste arbitraire d'index de sommet.
L'indexation correspond à l'ordre dans lequel les sommets ont été créés par la commande Vertex,
ainsi la commande Face doit être déclaré après la commande Vertex.
La première commande Vertex utilisé crée l'index 0, et les commandes Vertex suivantes
créent les indices 1, 2, 3 et ainsi de suite. L'ordre dans lequel l'index de sommet apparaît est important.
Ils doivent être donné dans le sens des aiguilles d'une montre en regardant par devant la surface.
L'arrière de la surface ne sera pas visible. Toutefois, la commande Face2 peut être utilisé pour
créer une surface qui est visible des deux côtés. Seul les polygones convexes sont supportés.
|
|
Face2, v1, v2, v3, ..., vmax
vi: L'indice du sommet inclus dans la surface.
Les valeurs permises sont de 0 à n-1, où n est le nombre de commandes Vertex utilisé.
Cette commande crée une surface donné par une longue liste arbitraire d'index de sommet.
L'indexation correspond à l'ordre dans lequel les sommets ont été créés par la commande Vertex,
ainsi la commande Face2 doit être déclaré après la commande Vertex. La première commande Vertex
utilisé crée l'index 0, et les commandes Vertex suivantes créent les indices 1, 2, 3 et ainsi de suite.
L'ordre dans lequel l'index de sommet apparaît est important. Ils doivent être donné dans le sens des aiguilles
d'une montre en regardant par devant la surface. L'arrière de la surface sera elle aussi visible, cependant,
la luminosité sur la surface arrière pourrait être la même que sur la surface avant.
Seul les polygones convexes sont supportés.
|
|
Cube, HalfWidth, HalfHeight, HalfDepth
HalfWidth : Un nombre (à point flottant) représentant la demi largeur du cube en mètres.
HalfHeight : Un nombre (à point flottant) représentant la demi hauteur du cube en mètres.
HalfDepth : Un nombre (à point flottant) représentant la demi longueur du cube en mètres.
Cette commande crée un cube qui a les dimensions spécifié par HalfWidth, HalfHeight et HalfDepth.
Le cube sera centré sur l'origine (0,0,0). Ainsi, sur l'axe X, le cube s'étend de -HalfWidth à HalfWidth,
sur l'axe Y de -HalfHeight à HalfHeight et sur l'axe Z de -HalfDepth à HalfDepth.
Le cube a toujours 8 sommets et 6 surfaces.
La commande Cube est l’équivalent d'une série de commande Vertex et Face,
que vous auriez besoin pour le représenter en utilisant d'autres commandes dans la même section [MeshBuilder].
Les détails sur ce que la commande Cube fait est disponible
ici.
|
|
Cylinder, n, UpperRadius, LowerRadius, Height
n : Un nombre entier qui représente le nombre de sommets utilisé pour la base du frustum.
UpperRadius : Un nombre (à point flottant) représentant le rayon de la base supérieure du frustum en mètres.
Peut être négatif pour indiquer que le bouchon supérieure doit être omis.
LowerRadius : Un nombre (à point flottant) représentant le rayon de la base inférieure du frustum en mètres.
Peut être négatif pour indiquer que le bouchon inférieure doit être omis.
Height : Un nombre (à point flottant) représentant la hauteur du prisme en mètres.
Peut être négatif, qui inversera le volume et l'affichera verticalement vers le bas.
Cette commande crée un frustum (volume). Si LowerRadius et UpperRadius sont égaux, l'objet généré
sera réduit à un prisme, qui peut être utilisé comme une approximation de cylindre. si LowerRadius
ou UpperRadius sont à zéro, l'objet généré sera réduit à une pyramide. le frustum est centré sur l'origine (0,0,0).
Sur l'axe des x et l'axe des z, le frustum s'étend de -LowerRadius à LowerRadius pour la base de dessous
et de -UpperRadius à UpperRadius pour la base de dessus. Sur l'axe des y,
le frustum s'étend de -½*Height a ½*Height.
Le nombre n de sommets a 6 ou 8 suffira d'ordinaire quand seulement de petits rayons sont utilisés,
par exemple pour créer un pôle. Sans tenir compte des valeurs de UpperRadius, LowerRadius and n,
le frustum aura toujours 2*n de sommets, et ordinairement n+2 faces à moins que n'importe quel bouchon soit omis.
Si UpperRadius ou LowerRadius sont négatifs, la valeur absolue est prise, mais les bouchons respectifs
ne sont pas créés. Si Height est négatif, le rôles du dessus et du dessous sont inversé et
les surfaces seront visible de l’intérieur, alors qu'autrement, ils seront visibles de l'extérieur.
ⓘ Représentation de Cylinder
|
La commande Cylinder est l’équivalent d'une série de commande AddVertex and AddFace,
que vous auriez besoin pour le représenter en utilisant d'autres commandes dans la même section CreateMeshBuilder.
Les détails sur ce que fait la commande Cylinder sont disponible
ici.
|
|
GenerateNormals
Cette commande n'est pas utilisée par openBVE.
|
|
Translate, X, Y, Z
TranslateAll, X, Y, Z
X: Un nombre (à point flottant) qui représente la translation sur la coordonnée X en metres.
Les valeurs négatives correspondent à une translation vers la gauche, positive vers la droite.
La valeur par défaut est 0 0.
Y: Un nombre (à point flottant) qui représente la translation sur la coordonnée Y en metres.
Les valeurs négatives correspondent à une translation vers le bas, positive vers le haut.
La valeur par défaut est 0.
Z: Un nombre (à point flottant) qui représente la translation sur la coordonnée Z en metres.
Les valeurs négatives correspondent à une translation vers l’arrière, positive vers l'avant.
La valeur par défaut est 0.
La commande Translate déplace tous les sommets qui ont été créés, dans la section [MeshBuilder],
via les commandes Vertex, Cube ou Cylindre. Les sommets subséquents ne sont pas affectés.
Vous pouvez utiliser autant de commande Translate que vous désiré dans une section [MeshBuilder].
La commande TranslateAll affecte non seulement les sommets produits dans la section [MeshBuilder] actuelle,
mais aussi celles créé dans les sections [MeshBuilder] précédentes.
Utile à insérer à la fin du dossier pour déplacer l'objet entier.
|
|
Scale, X, Y, Z
ScaleAll, X, Y, Z
X : Un nombre différent de zéro (à point flottant) représentant le facteur d'échelle sur la coordonnée X.
La valeur par défaut est 1.
Y : Un nombre différent de zéro (à point flottant) représentant le facteur d'échelle sur la coordonnée Y.
La valeur par défaut est 1.
Z : Un nombre différent de zéro (à point flottant) représentant le facteur d'échelle sur la coordonnée Z.
La valeur par défaut est 1.
La commande Scale met à l’échelle tous les sommets qui ont été créés dans la section [MeshBuilder]
via la commande Vertex, Cube ou Cylinder. Les sommets subséquents ne sont pas affectés.
Vous pouvez utiliser autant de commande Scale que vous désiré dans une section [MeshBuilder].
La commande ScaleAll affecte non seulement les sommets générés dans la section [MeshBuilder],
mais aussi celles créé dans les sections [MeshBuilder] précédentes. Utile à insérer à la fin du
dossier pour mettre à l'échelle l'objet entier.
|
|
Rotate, X, Y, Z, Angle
RotateAll, X, Y, Z, Angle
X : la direction X de l'axe de rotation. Les valeurs négatives indiquent vers la gauche, positives vers la droite.
La valeur par défaut est 0.
Y : la direction Y de l'axe de rotation. Les valeurs négatives indiquent vers le bas, positives vers le haut.
La valeur par défaut est 0.
Z : la direction Z de l'axe de rotation. Les valeurs négatives indiquent vers l'arrière, positives vers l'avant.
La valeur par défaut est 0.
Angle : L'angle de rotation en degrés. Les valeurs négatives dans le sens inverse des aiguilles d'une montre,
positive dans le sens des aiguilles d'une montre. La valeur par défaut est 0.
La commande Rotate tourne tous les sommets qui ont été créés dans la section courante [MeshBuilder]
via la commande Vertex, Cube ou Cylinder. Les sommets subséquents ne sont pas affectés.
L'axe de rotation est spécifié via les valeurs de X, de Y et de Z. La rotation se fait dans le
plan perpendiculaire à cette direction. Le vecteur zéro pour cet axis est traité par (1,0,0).
Toutes les autres directions sont normalisées.
Vous pouvez utiliser autant de commande Rotate que vous désiré dans une section [MeshBuilder].
La commande RotateAll affecte non seulement les sommets générés dans la section [MeshBuilder],
mais aussi celles créé dans les sections [MeshBuilder] précédentes. Utile à insérer à la fin du dossier
pour tourner l'objet entier.
|
|
Shear, dX, dY, dZ, sX, sY, sZ, r
ShearAll, dX, dY, dZ, sX, sY, sZ, r
dX : La coordonée X pour le vecteur D. La valeur par défaut est 0.
dY : La coordonée Y pour le vecteur D. La valeur par défaut est 0.
dZ : La coordonée Z pour le vecteur D. La valeur par défaut est 0.
sX : La coordonée X pour le vecteur S. La valeur par défaut est 0.
sY : La coordonée Y pour le vecteur S. La valeur par défaut est 0.
sZ : La coordonée Z pour le vecteur S. La valeur par défaut est 0.
r : Le ratio qui indique de combien on déplacer les vecteurs. La valeur par défaut est 0.
La commande Shear execute une transvection
pour tous les sommets qui on été créé dans la section [MeshBuilder] courrante.
La commande ShearAll affecte non seulement les sommets
généré dans la section [MeshBuilder] courante, mais aussi ceux créé dans les précédentes sections
[MeshBuilder]. Utile à insérer à la fin du fichier pour l’appliquer à l'objet entier.

La transvection est exécuté autour de l'origine. Pour parler crûment, l'objet est coupé en plans
le long de la direction D et alors déplacé le long de la direction S. Typiquement, D et S
sont perpendiculaires. D et S sont toujours normalisés. Si Ratio est égal à 0, aucune transformation
n'est exécutée. si D et S sont perpendiculaires, le Ratio de 1 corresponds à une pente de 45 degrés.
|
|
Color, Red, Green, Blue, Alpha
Red : Le composant rouge de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 255.
Green : Le composant vert de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 255.
Blue : Le composant bleu de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 255.
Alpha : Le composant d'alpha de la couleur. Mesuré de 0 (transparent) à 255 (opaque). La valeur par défaut est 255.
La commande règle la couleur pour tous les surfaces qui ont été déjà créés dans la section
[MeshBuilder] actuelle. Si aucune texture n'est utilisée, les surfaces seront colorés en
utilisant les données de couleur comme spécifié par Red, Green et Blue. Si une texture est utilisée,
les pixels dans la texture seront multipliés par la couleur, en multipliant avec le noir a
pour résultat du noir et en multipliant avec du blanc ne change pas la couleur des pixels de la texture.
Les valeurs intermédiaire rendent plus sombres les pixels de la texture.
Quand une lumière est utilisé dans la route, la véritable couleur peut changer dépendament
des conditions d'éclairage, mais d'ordinaire deviendra plus sombre.
|
|
EmissiveColor, Red, Green, Blue
Red : Le composant rouge de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Green : Le composant vert de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Blue : Le composant bleu de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Cette commande règle la couleur émise pour toutes les faces qui ont été déjà créés dans la section
[MeshBuilder] actuelle. La différence entre la commande Color et la commande EmissiveColor
est que la commande Color est affectée par l'éclairage, alors que la commande EmissiveColor ne l'est pas.
Ainsi, la commande EmissiveColor devrait être utilisé pour les faces qui émettraient la lumière elle même,
y compris les signaux, les lampes, les fenêtres et analogue. La véritable contribution de la couleur
sur les faces sera la somme des données des couleurs affectés par la lumière et les données d’émission
de couleur statiques.
|
|
BlendMode, BlendMode, GlowHalfDistance, GlowAttenuationMode
BlendMode : Le mode mélange est utiliser. Le défaut est Normal.
GlowHalfDistance : La distance à laquelle la lueur est à 50% de son intensité,
mesurée en mètres. La valeur doit être un nombre entier dans les valeurs de 1 à 4095,
ou 0 rend hors service l’atténuation de la lueur. La valeur par défaut est 0.
GlowAttenuationMode : Le mode d'atténuation de la lueur est utiliser.
La valeur par défaut est DivideExponent4.
Options disponibles pour BlendMode :
Normal : Les surfaces sont rendus normalement.
Additive : Les surfaces sont rendus additivement.
Options disponibles pour GlowAttenuationMode :
DivideExponent2 : L'intensité de la lueur est déterminée via la fonction x2 / (x2 + GlowHalfDistance2),
où x Est la distance de la camera à l'objet en metres.
DivideExponent4 : L'intensité de la lueur est déterminée via la fonction x4 / (x4 + GlowHalfDistance4),
où x Est la distance de la camera à l'objet en metres.
Cette commande règle le mode de mélange pour toutes les faces dans la section CreateMeshBuilder actuelle.
Le mode Normal remplace les pixels d'écran avec les pixels de texture. Le mode Additive ajoute la couleur de
pixels de la texture à la couleur de pixels d'écran, où en ajoutant du noir on ne change pas le pixel d'écran,
en ajoutant du blanc on a pour résultat du blanc. Si GlowHalfDistance est à 0, L'atténuation de
lueur est hors service, c'est par défaut. Si L'atténuation de lueur est utilisée, GlowHalfDistance
représente la distance en metres à lesquels la lueur est exactement à 50% de son intensité.
Quand la camera approche de la surface, la surface s'estompera graduellement (devient transparent).
La fonction qui est utilisée pour déterminer l'intensité exacte à une distance donnée peut être
influencée avec le paramètre de GlowAttenuationMode. DivideExponent2 crée une transition plus lisse,
mais convergera à l'intensité maximum très lentement, alors que DivideExponent4 crée une transition
plus tranchante qui converge plus rapidement.
⚠OpenBVE 2 note de compatibilité :
Dans openBVE 2, seule la lueur additive sera supportée et le paramètre de GlowAttenuationMode sera
probablement ignoré. S'il vous plaît éviter d'utiliser le rendu normal conjointement avec
l'utilisation de lueur.
|
|
|
Load, DaytimeTexture, NighttimeTexture
DaytimeTexture : Le nom du fichier de la version de jour de la texture à charger, relatif au dossier
ou le fichier de l'objet est rangé.
NighttimeTexture : Le nom du fichier de la version de nuit de la texture à charger, relatif au dossier
ou le fichier de l'objet est rangé.
Cette commande charge une texture et l'utilise pour toutes les surfaces de la section [MeshBuilder] actuelle.
Le nom du fichier est relatif tau dossier dans lequel le fichier de l'objet est rangé.
Vous pouvez utiliser un PNG, avec le support de canal alpha plein, mais n'utiliser le canal alpha seulement
si c'est absolument exigé car cela réduit les performances. Préférez utilisé une texture sans
canal alpha conjointement avec la commande SetDecalTransparentColor pour utiliser la transparence des couleurs clé.
Si NighttimeTexture est utilisé, Il spécifie que la texture doit être utilisée dans les conditions
d'éclairage de nuit, alors que DaytimeTexture spécifie que la texture doit être utilisée dans
les conditions d'éclairage de jour. Les textures pouvant se mélanger l'une l'autre devrait être
désigné en conséquence. Si NighttimeTexture est utilisé, DaytimeTexture doit être aussi spécifié.
Si NighttimeTexture n'est pas utilisé, les conditions d'éclairage de niveau bas feront que la version
de jour sera plus sombre. Les textures de nuit sont destinées à l’utilisation des objets extérieurs du train.
|
|
Transparent, Red, Green, Blue
Red : Le composant rouge de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Green : Le composant vert de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Blue : Le composant bleu de la couleur. Mesuré de 0 (noir) à 255 (rouge). La valeur par défaut est 0.
Cette commande règle la couleur utilisée pour la transparence à l'écran pour toutes les surfaces
déjà créés. La texture chargée via la commande Load sera transparente pour tous les pixels
qui seront exactement égaux avec la couleur spécifiée via les paramètres Red, Green et Blue. L'utilisation
de la transparence à l'écran est beaucoup plus efficace qu'utiliser un canal alpha plein, donc préférez
utiliser une texture sans canal alpha et utilisez cette commande plutôt que de créer des parties transparente à la
texture. Vous devrez spécifier dans l'ordre les coordonnées de texture via la commande Coordinate
pour que la texture apparaisse correctement sur les surfaces.
|
|
Coordinates, VertexIndex, X, Y
VertexIndex : L'index du sommet auquel se réfère la coordonnée. Les valeurs permises sont 0 jusqu'à n-1,
où n est le nombre de commande Vertex utilisé.
X : La coordonnée x de la texture. Un nombre entier correspondant au bord gauche/droit de la texture.
Seule les valeurs 0 et 1 sont considérées, 0 corresponds à la gauche and 1 à la droite.
Y : La coordonnée x de la texture. Un nombre entier correspondant au bord haut/bas de la texture.
Seule les valeurs 0 et 1 sont considérées, 0 corresponds bord haut et 1 au bas.
Cette commande associe une coordonnée à la texture au sommet spécifié par VertexIndex.
L'indice correspond à l'ordre dans lequel les sommets ont été créés par la commande Vertex,
ainsi la commande Coordinates a besoin d'être déclaré après la commande Vertex.
Les valeurs de X et Y n'ont pas nécessairement besoin d'être entre 0 (gauche ou haut) à 1 (droite ou bas),
mais peut avoir aussi autre valeur. Il est supposé que dans ce cas la texture est répétée
sur une grille infinie ou la valeurs du nombre entier pour X et Y corresponds aux coins de la texture.
|
|
|
|
|
|