Precompiled Mesh File


by JeGX


Pourquoi le PMF

Le Precompiled Mesh File (PMF) permet de stocker la description complete d'un mesh polygonal. A la différence, par exemple, du format ASC de 3DS, le PMF contient la liste de toutes les normales à chaque face et à chaque vertex. Les nombres de faces et de vertices sont stockés sur 32 bits non signés ce qui signifie que l'on peut stocker des meshes bien chargés en polygones (le format 3ds, le nombre de faces et de vertices est codé sur 16 bits (why????)). Autre intérêt : le loading d'un mesh volumineux (par exemple 100000 faces) et son affichage en smooth est très rapide puisqu'il n'y a plus toute la phase de précalcul des normales. La toute dernière version (v3) du format PMF contient les bounding box et sphere pour le mesh 3D.

Structure d'un PMF

Structure globale du fichier - PMF toutes versions

Header
Vertices List
Faces List

Le header

Structure du header - PMF Version 1 et 2
ChampTailleDescription
magicCode1*unsigned longIdentification du pmf. Contient la chaîne "_PMF"
version1*unsigned longVersion du PMF : 1, 2 ou 3
numVertices1*unsigned longNombres de sommets 3D.
numFaces1*unsigned longNombres de faces triangulaires.


Structure du header - PMF Version 3
ChampTailleDescription
magicCode1*unsigned longIdentification du pmf. Contient la chaîne "_PMF"
version1*unsigned longVersion du PMF : 1, 2 ou 3
numVertices1*unsigned longNombres de sommets 3D.
numFaces1*unsigned longNombres de faces triangulaires.
AABB9*floatAxis Aligned Bounding Box.
BS4*floatBounding Sphere.


Structure Axis Aligned Bounding Box - PMF version 3
ChampTailleDescription
min_xfloatComposante x du coin inférieur.
min_yfloatComposante y du coin inférieur.
min_zfloatComposante z du coin inférieur.
max_xfloatComposante x du coin supérieur.
max_yfloatComposante y du coin supérieur.
max_zfloatComposante z du coin supérieur.
center_xfloatComposante x du centre de la BB.
center_yfloatComposante y du centre de la BB.
center_zfloatComposante z du centre de la BB.


Structure Bounding Sphere - PMF version 3
ChampTailleDescription
radiusfloatRayon de la BS.
center_xfloatComposante x du centre de la BS.
center_yfloatComposante y du centre de la BS.
center_zfloatComposante z du centre de la BS.

Structure d'un vertex

La liste des vertices est stockée à la suite du header. Les vertices se suivent de façon contigüe.

Structure d'un vertex - PMF version 1
ChampTailleDescription
xfloatComposante x
yfloatComposante y
zfloatComposante z
nxfloatComposante x de la normale
nyfloatComposante y de la normale
nzfloatComposante z de la normale
ufloatCoordonnée de texture u
vfloatCoordonnée de texture v


Structure d'un vertex - PMF version 2 et 3
ChampTailleDescription
xfloatComposante x
yfloatComposante y
zfloatComposante z
nxfloatComposante x de la normale
nyfloatComposante y de la normale
nzfloatComposante z de la normale
rfloatComposante rouge de la couleur
gfloatComposante verte de la couleur
bfloatComposante bleue de la couleur
ufloatCoordonnée de texture u
vfloatCoordonnée de texture v

Structure d'une face

La liste des faces est stockée à la suite de celle des vertices. Les faces se suivent de façon contigüe.

Structure d'une face - PMF toutes versions
ChampTailleDescription
aunsigned longIndex sommet 0 de la face dans la liste des vertices.
bunsigned longIndex sommet 1 de la face dans la liste des vertices.
cunsigned longIndex sommet 2 de la face dans la liste des vertices.
nxfloatComposante x de la normale
nyfloatComposante y de la normale
nzfloatComposante z de la normale