Il problema è che le tabelle non le abbiamo studiate, e quindi partirei in svantaggio, ho letto solo una paginetta scarsa presa da google.
Comunque mi capita una cosa strana: quando metto i vertici nella lista nell'ordine delle facce, in modo da dover renderizzare i vertici dalla prima all'ultima posizione della lista, mi trova il numero corretto di vertici ma sono tutti 0!
Guardate:
Codice:
MODELLO
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
.....................................
continua...
.......................................
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
MODELLO
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
..............................................
.............................................
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
Faccia: a->0.000000 0.000000 0.000000 b->0.000000 0.000000 0.000000 c-> 0.000000 0.000000 0.000000
La cosa strana è che il numero di modelli è corretto, e il numero di facce è proprio quello che mi aspetto... (si, le ho contate una ad una

)
quindi le operazioni sulle liste le faccio al momento giusto.
Questo è il codice, non spaventatevi se alcuni nomi sembrano ridicoli...
Codice:
scena S = creaScena(); // crea la scena
modScena mS = inizioScena(S); // si sposta all'inizio della scena
posizione p; // posizione per spostarsi tra le facce del modello
// ---------------------------------
// conta il numero di oggetti
// ---------------------------------
FILE *file = fopen("Livelli/liv_1_Scene.obj", "r"); // apre il file in lettura
char fbegin[10], fend[15], ftmp1[15], ftmp2[15];
float x, y, z;
while ( ! feof(file)) // loop attraverso il file
{
stato = fscanf(file, "%s", fbegin);
// ora preleva le facce
if(fbegin[0] == 's')
{
stato = fscanf(file, "%s", fbegin);
mS->Modello = creaModello(); // crea un modello della scena
p = inizioModello(mS->Modello); // sposta la posizione all'inizio del modello corrente
do
{
stato = fscanf(file, "%s %2d%*5s%2d%*5s%2d%*5s", fbegin, &a, &b, &c);
printf("fbegin vale :\t%s\n", fbegin);
printf("Faccia :\t%d\t%d\t%d\n", a, b, c);
nuovaFaccia(va[n_oggetti-1][a],va[n_oggetti-1][b],va[n_oggetti-1][c], &p);
if(fbegin[0] == 'o')
break; // esce per caricare il nuovo oggetto
}
while((fbegin[0] == 'f') && (stato != EOF));
printf("\n FINE MODELLO \n");
// crea un nuovo modello vuoto per dopo.
nuovoModello(mS->Modello, &mS);
//printf("TOTALE DI OGGETTI contati : %d\n", n_oggetti);
}
// legge il nome di un oggetto, e inizia a prelevarne i dati
if(fbegin[0] =='o' && (fbegin[1] !='f'))
{
// crea un nuovo modello della scena
contaVertici = 0;
stato = fscanf(file, "%s", fbegin);
printf("Nome Oggetto : %s\n", fbegin);
do
{
stato = fscanf(file, "%s %f %f %f", fbegin, &x, &y, &z);
if ((fbegin[0] == 'v') && (fbegin[1] != 'n'))
{
// carica il vertice nel vettore dei vertici
va[n_oggetti][contaVertici].x = x;
va[n_oggetti][contaVertici].y = y;
va[n_oggetti][contaVertici].z = z;
}
else if (fbegin[1] == 'n')
{
// se ci sono preleva le normali
printf("fbegin vale %s\n", fbegin);
//printf("Normale %00d:\t%f\t%f\t%f\n", n_normali[n_oggetti], x, y, z);
n_normali[n_oggetti] ++; // incrementa il numero di facce dell'oggetto corrente
}
contaVertici ++; // incrementa il contatore di vertici
}
while(fbegin[0] == 'v'); // conta tutti i vertici
// controlli
//printf("TOTALE DI OGGETTI contati : %d\n", n_oggetti);
//printf("TOTALE DI VERTICI : %d\n", n_vertici[n_oggetti]);
//printf("TOTALE DI NORMALI : %d\n\n\n", n_normali[n_oggetti]);
n_oggetti ++; // incrementa il contatore di oggetti nella scena.
}
}
fclose(file); // chiude il file
// successione di controlli
mS = inizioScena(S); // si sposta all'inizio della scena
while(! fineScena(mS, S))
{
printf("MODELLO \n");
p = inizioModello(mS->Modello); // si posiziona alla prima faccia del modello corrrente
while( ! fineModello(p, mS->Modello))
{
printf("Faccia: a->%f %f %f b->%f %f %f c-> %f %f %f\n", p->a.x, p->a.y, p->a.z,
p->b.x, p->b.y, p->b.z,
p->c.x, p->c.y, p->c.z);
p = facciaDopo(p);
}
mS = modelloDopo(mS); // èassa al modello successivo
//printf("FACCIA: %f,%f,%f||%f,%f,%f||%f,%f,%f\n", mS->Modello->a.x,mS->Modello->a.y,mS->Modello->a.z,mS->Modello->b.x,mS->Modello->b.y,mS->Modello->b.z);
}
Le strutture sono definite cosi:
Codice:
struct VERTICE
{
float x,y,z;
};
typedef VERTICE verts;
// definisce i tipi di dato che fanno uso della struttura FACCIA
typedef struct FACCIA * modello;
typedef struct FACCIA * posizione;
// struttura per la faccia di un poligono
struct FACCIA
{
posizione prima; // faccia precedinte da disagnare
verts a, b, c;
posizione dopo; // faccia successiva da disegnare
};
typedef struct SCENA * modScena; // pr spostarsi tra un modello e l'altro
typedef struct SCENA * scena;
// struttura per una scena formata da più modelli
struct SCENA
{
modScena precedente; // modello precedente della scena
modello Modello; // istanza della struttura che contiene un modello
modScena successivo; // modello successivo della scena
};
Mi potete spiegare perchè tutti i miei vertici valgono 0, nonostante evidentemente percorra tutte le facce e li inserisca correttamente?