Parser OBJ et tokenizer
Parser de fichiers Wavefront OBJ en C++ (sommets, coordonnées de texture, normales, faces) et tokenizer qui découpe un texte en segments imbriqués
C++ · CMake · Parsing · Wavefront OBJ · 3D · Solo
Un parser de modèles 3D au format Wavefront OBJ et un tokenizer générique, écrits pendant le module « Parser » de GTech 3.
Contexte
Semaine théorique du 3 au 7 novembre 2025 : parser texte, parser binaire, parser .obj, puis une introduction au SDK
FBX et à OpenGL. Le dépôt garde le nom du module (« Parser FBX ») ; le code écrit porte sur le tokenizer et le parser
OBJ. Les supports de cours et les projets fournis (basicgl, bmp, parser) sont rangés dans Doc/.
Ce que j'y ai fait
Le tokenizer et son programme de test, puis le parser OBJ : structures de données, lecture ligne par ligne, prise en charge des quatre formats de face, conversion des indices, fichiers de test, CMake et README. Travail individuel.
Liens
- 4---Parser-FBX (code dans
Semaine Exo/, brancheKiki)
Parser OBJ
Lignes reconnues :
| Commande | Contenu |
|---|---|
v x y z [w] | Sommet (w = 1.0 par défaut) |
vt u v [w] | Coordonnée de texture (w = 0.0 par défaut) |
vn x y z | Normale |
f ... | Face : v, v/vt, v//vn ou v/vt/vn, triangles, quads et polygones |
o nom | Nom de l'objet |
# | Commentaire |
Les indices du fichier (base 1) sont convertis en base 0 ; un indice absent vaut -1. Les lignes vp, s, g,
usemtl et mtllib sont ignorées. Une erreur renvoie false et un message avec le numéro de ligne
(getLastError()).
ObjData
├── vertices : std::vector<Vertex>
├── texCoords : std::vector<TexCoord>
├── normals : std::vector<Normal>
├── faces : std::vector<Face> (FaceVertex : vIndex, vtIndex, vnIndex)
└── objectName
Tokenizer
tokenize: découpe un texte en jetons (:,(,),{,},/,\,",,et chaînes).segmentize: regroupe les jetons en segments imbriqués (parenthèses, accolades, guillemets) à l'aide d'une pile.
Tests
cube.obj: 8 sommets, 4 coordonnées de texture, 6 normales, 12 triangles.test-formats.obj: une face de chaque format, plus un quad.test.shcompile et lance le parser sur les deux fichiers.
Stack
| Tech | Rôle |
|---|---|
| C++17 | Langage |
| CMake / Visual Studio | Build (deux exécutables : TestObjParser, TestTokenizer) |