Récuperer données d'un fichier
Bonjour,
J'essaye de créer un loader de fichier 3D OBJ. Le format est un format texte qui se présente comme ceci pour un simple cube :
Citation:
o 1
# Vertex list
v -0.539683 0 0.031746
v 0.52381 0 0.031746
v 0.52381 0 -1
v -0.539683 0 -1
v -0.539683 0 0.031746
v 0.52381 0 0.031746
v 0.52381 0 -1
v -0.539683 0 -1
v -0.539683 0.899706 0.031746
v 0.52381 0.899706 0.031746
v 0.52381 0.899706 -1
v -0.539683 0.899706 -1
# Face list
g
usemtl Default
f 2 3 4 1
g
f 8 7 6 5
g
f 6 10 9 5
g
f 7 11 10 6
g
f 12 11 7 8
g
f 9 12 8 5
g
f 10 11 12 9
# End
Chaque vertice est définit par v suivi d'un espace et des trois couplets x, y, z, tandis que les faces par f.
Je voudrais simplement récupérer ces valeurs, mais j'ai beaucoup de mal à comprendre comment ça fonctionne (ça a toujours été mon point faible, les fichiers :aie: ).
J'ai pour ceci dans ma classe :
CVector * vertices;
stPolygon * polyList;
Je pense qu'il est mieux d'utiliser des vector mais obn, on verra ça après. Donc j'ai réussi à récupérer le nombre de faces et le nombres de vertices avec ce code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| std::ostringstream buffer;
std::string strBuffer;
buffer << fichier.rdbuf();
strBuffer = buffer.str ();
std::string ligne;
for (unsigned int i = 0 ; i < strBuffer.size () - 1; ++i)
{
if (strBuffer [i] == 'v' && strBuffer [i+1] == ' ')
totalVertices++;
if (strBuffer [i] == 'f' && strBuffer [i+1] == ' ')
totalFaces++;
} |
Toutefois, je ne sais pas du tout comment faire pour récuperer les autres valeurs que je veux...
Par exemple je voudrais faire ça :
if (strBuffer [i] == 'v' && strBuffer [i+1] == ' ')
{
GLfloat x, y, z;
x = la valeur d'x;
y = la valeur d'y;
z = la valeur d'z;
vertices = new CVector (x, y, z);
totalVertices++;
}
J'avias pensé à un getline pour récuperer touta la ligne (je fais le if, si c'est bon, je récupère toute la ligne avec getline, et je récupère les valeurs), mais je suis incapable de le faire :|.
Merci.