/* breve spiegazione : ogni punto che voglio disegnare sullo schermo ha tre coordinate, scritte come float
è per questo che uso gli arrai bidimensionali */
#include<iostream>
#include<string>
#include<GL/gl.h>
#include<GL/glut.h>
#define MAX_VERT 100000
using namespace std;
void load(char *filename)
{
float coordVert[MAX_VERT][3];//creo un array bidimensionale con le cordinate del vertice da inserire nella funzione
//glVertex3f(%f,%f,%f);
int vertPos[MAX_VERT][3]; //file position della dichiarazione del vertice
for(int o = 0;o <= MAX_VERT;o++)
for(int n = 1;n <= 3; n++)
{
coordVert[o][n] = 0;
vertPos[o][n] = 0;
}
int numbLine = 0; //numero di linee
int numbVert = 0;// numero dei vertici
int c[MAX_VERT]; //per fgetc()
int numbChar = 0; //numero caratteri totali
FILE* obj; //stream per leggere il file
int i = 0;//vettore di c[]
int x = 1;//seconda dimensione dell'array
cout<<"inizio\n";
for(int p = 0;p <= MAX_VERT;p++)
c[p] = 0; //inizializzo 'c'
cout<<"c inizializzata\n";
obj = fopen(filename,"r"); //apro il file lo stream in lettura
cout<<"stream aperto\n";
cout<<"ora leggo il file\n";
while((c[i] = fgetc(obj)) != EOF)//memorizza ogni carattere della riga in un elemento del vettore di 'c'
{
++numbChar;//conto i caratteri, non è che mi serva a molto ma l'avevo messo all'inizio per vedere se funzionava tutto
if(c[i] == '\n'){
++numbLine;
cout<<"\nriga "<<numbLine<<" letta\n";
}
if(c[i] == 'v' && c[i-1] == '\n') //se incontra una 'v' che segue un carattere newline aumenta il numero dei vertici
{
++numbVert;//aumento il numero dei vertici
vertPos[numbVert][x] = (ftell(obj)+1);//memorizzo la file position delle 3 coordinate di ogni punto
cout<<"\nposizione coodinata 1 punto "<<numbVert<<" memorizzata\n";
cout<<"file position 1 punto "<<numbVert<<" : "<<vertPos[numbVert][x]<<endl;
++x;
vertPos[numbVert][x] = (ftell(obj)+10);
cout<<"\nposizione coodinata 2 punto "<<numbVert<<" memorizzata\n";
cout<<"file position 2 punto "<<numbVert<<" : "<<vertPos[numbVert][x]<<endl;
++x;
vertPos[numbVert][x] = (ftell(obj)+20);
cout<<"\nposizione coodinata 3 punto "<<numbVert<<" memorizzata\n";
cout<<"file position 3 punto "<<numbVert<<" : "<<vertPos[numbVert][x]<<endl;
if(x >= 3)x = 1;
}
++i;
}
cout<<"\nfine del file\n";
int a = numbVert;
cout<<"assegno le coordinate\n";
for(numbVert = 0;numbVert <= a;++numbVert)
for(x = 1;x <= 3;x++)
{
fseek(obj,vertPos[numbVert][x],SEEK_SET);//ottengo la file position delle cordinate
fscanf(obj,"%f",&coordVert[numbVert][x]);//e le leggo con fscanf e le assegno a coordVert
}
for(numbVert = 1;numbVert <= a;++numbVert)
{
cout<<"\nCoordinata 1 punto "<<numbVert<<" "<<coordVert[numbVert][1]<<endl;
cout<<"Coordinata 2 punto "<<numbVert<<" "<<coordVert[numbVert][2]<<endl;
cout<<"Coordinata 3 punto "<<numbVert<<" "<<coordVert[numbVert][3]<<endl;
}
cout<<"disegnoo!!\n";
glLoadIdentity();
glBegin(GL_POLYGON);
glColor3f(0.0f,0.0f,1.0f);
for(numbVert = 1;numbVert <= a;++numbVert)
{ //per ogni vertice c'è glVertex3f con le varie coordinate di ogni punto
glVertex3f(coordVert[numbVert][1],coordVert[numbVert][2],coordVert[numbVert][3]);
}
glEnd();
cout<<"Disegnato!\n"<<endl;
cout<<"\n numero vertici "<<a<<endl;
fclose(obj);
}