Demande d'aide en C++

Demande d'aide en C++ - Programmation

Marsh Posté le 09-02-2001 à 13:13:21    

salut,
 
J'ai un petit problème en programmation si quelqu'un pouvait m'aider ce serait cool.
 
Voilà mon problème, j'aimerais bien pouvoir lire des données d'un fichier *.ase
C'est basicallement un fichier texte regroupant des coordonnées.
 
 
Partie de mon source qui est important :
 
*********************************************************
Definition dans le programme pour enregistrer les données
*********************************************************
 
typedef struct tagVERTEX
{
 float x, y, z;  // 3 coordonnées pour 1 point
} VERTEX;
 
typedef struct tagFACES
{
 VERTEX vertex[3];
} FACES;
 
typedef struct tagSECTOR
{
 int numfaces;
 FACES* faces;
} SECTOR;
 
SECTOR example1;
 
 
 
J'aimerais lire les données d'un fichier ASE :
 
En voici un exemple:
  *MESH_NUMVERTEX 8  ; NOMBRE DE POINTS
  *MESH_NUMFACES 12  ; NOMBRE DE FACES
  *MESH_VERTEX_LIST {
   *MESH_VERTEX    0 0.0000 0.0000 0.0000  ;VERTEX COORDONNEES : X,Z,Y
   *MESH_VERTEX    1 50.0000 0.0000 0.0000
   *MESH_VERTEX    2 0.0000 100.0000 0.0000
   *MESH_VERTEX    3 50.0000 100.0000 0.0000
   *MESH_VERTEX    4 0.0000 0.0000 50.0000
   *MESH_VERTEX    5 50.0000 0.0000 50.0000
   *MESH_VERTEX    6 0.0000 100.0000 50.0000
   *MESH_VERTEX    7 50.0000 100.0000 50.0000
  }
  *MESH_FACE_LIST {  ; FACE DETAILS, LES 3 POINTS D'UNE FACE, AVEC LE LIEN (AB-BC)
 *MESH_FACE    0:    A:    0 B:    2 C:    3 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 2  *MESH_MTLID 1
 *MESH_FACE    1:    A:    3 B:    1 C:    0 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 2  *MESH_MTLID 1
 *MESH_FACE    2:    A:    4 B:    5 C:    7 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 3  *MESH_MTLID 0
 *MESH_FACE    3:    A:    7 B:    6 C:    4 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 3  *MESH_MTLID 0
 *MESH_FACE    4:    A:    0 B:    1 C:    5 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 4  *MESH_MTLID 4
 *MESH_FACE    5:    A:    5 B:    4 C:    0 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 4  *MESH_MTLID 4
 *MESH_FACE    6:    A:    1 B:    3 C:    7 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 5  *MESH_MTLID 3
 *MESH_FACE    7:    A:    7 B:    5 C:    1 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 5  *MESH_MTLID 3
 *MESH_FACE    8:    A:    3 B:    2 C:    6 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 6  *MESH_MTLID 5
 *MESH_FACE    9:    A:    6 B:    7 C:    3 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 6  *MESH_MTLID 5
 *MESH_FACE   10:    A:    2 B:    0 C:    4 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 7  *MESH_MTLID 2
 *MESH_FACE   11:    A:    4 B:    6 C:    2 AB:    1 BC:    1 CA:    0  *MESH_SMOOTHING 7  *MESH_MTLID 2
 
 
Pour le moment rien d'autre ne m'intéresse, seulement les coordonnées des points et les
informations sur les faces.
 
 
Je prévois d'interpréter le code ainsi :
 
 
Routine :
void readstr(FILE *f,char *string)
{
 do
 {
  fgets(string, 255, f);
 } while ((string[0] == '/') || (string[0] == '\n'));
 return;
}
 
Routine :
void World()
{
 float x, y, z;
 int numvertex
 int numfaces
 FILE *filein;
 char oneline[255];
 filein = fopen("example.ase", "rt" );    //nom du fichier
 
 readstr(filein,oneline);
 sscanf(oneline, "MESH_NUMVERTEX %d\n", &numvertex);
 sscanf(oneline, "MESH_NUMFACES %d\n", &numfaces);
 
 example1.faces = new TRIANGLE[numfaces];
 example1.numfaces = numfaces;
 for (int vert = 0; vert < 3; vert++)  // boucle pour les points
  {
   readstr(filein,oneline);
   sscanf(oneline, "%f %f %f %f", &x, &z, &y);
   sector1.triangle[loop].vertex[vert].x = x;
   sector1.triangle[loop].vertex[vert].z = z;
   sector1.triangle[loop].vertex[vert].y = y;
  }
 
 fclose(filein);
 return;
}
 
 
Mais je ne sais pas comment interpreter et stocker les informations sur les points
dans la structure des FACES.
 
Si vous pouviez m'aider ce serait vraiment super.
 
Merci dans tous les cas.
 
 
 Fred.
 
PS : Désolé je sais que c'est mal présenté et expliqué donc si vous ne comprenez pas bien ce que je cherche à faire, vous pouvez toujours m'envoyer un mail à fredgladia@hotmail.com
Ce forum est cool !

Reply

Marsh Posté le 09-02-2001 à 13:13:21   

Reply

Marsh Posté le 09-02-2001 à 13:27:39    

non c'est pas ça.
A, B et C sont les indices dans la liste de vertices.
Dans ton exemple tu lis 8 vertice (0->7), et par exemple le triangle 0 est composé des vertices 0, 2 et 3.
 
Alors évidemment certains vertices sont partagés (ce qui peut poser des problèmes quend tu mappes, car alors tu peux avoir plusieurs couples (u,v) par vertex, mais c'est une autre histoire ...)
 
 
oilà, j'espère que ça répond à ta question.

Reply

Marsh Posté le 09-02-2001 à 13:29:50    

heu, non:(  
J'avais bien compris ça. Mon prob c'est justement pour mettre les données des points dans la table des faces, que j'utilise pas la suite.
Enfin c'est pas grave.

Reply

Marsh Posté le 09-02-2001 à 13:38:03    

ok, ton pb c'est comment remplir la structure "face" avant d'avoir lu les indices ?....
Ben stocke tous tes vertices dans une liste, et recopie-les un à un dans tes faces.
Trois pointeurs seraient bien entendu préférables, parce que dans la majorité des cas t'auras pas mal de doublons (voire "triplons" ....)

Reply

Marsh Posté le 09-02-2001 à 13:40:12    

okay, thx !

Reply

Marsh Posté le 09-02-2001 à 13:42:35    

c'est encore pas du tout ce que tu demandais, et t'ose pas me le dire, c'est ça ? :) :) :)

Reply

Marsh Posté le 09-02-2001 à 16:20:47    

lol
j'ai trouvé tout seul en fait
A+

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed