← Tous les projets d'école

terminé2025

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

GitHub ↗

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

Parser OBJ

Lignes reconnues :

CommandeContenu
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 zNormale
f ...Face : v, v/vt, v//vn ou v/vt/vn, triangles, quads et polygones
o nomNom 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.sh compile et lance le parser sur les deux fichiers.

Stack

TechRôle
C++17Langage
CMake / Visual StudioBuild (deux exécutables : TestObjParser, TestTokenizer)