#include <vector>
#include <iostream>
#include <fstream>
#include <string.h>
#include <math.h>
using namespace std;
struct Triangle{
int data[3];
};
struct Vertex{
float x, y, z;
};
//strips the prefix from the faces and UV coords
//and returns the index
int strip(string b){
int num=0;
int x;
int colon;
int size=b.size();
colon=b.find(":"); //find the :
colon++;
for(int i=colon;i<size;i++){
num=((num*10)+(b[i]-'0'));
}
return num;
}
class ASC{
private:
float pos[3];
float rot[3];
float scale[3];
int numVerts;
int numFaces;
vector <Vertex> vertices;
vector <Triangle> tris;
// vector <UVTex>
public:
void Load(char* filename);
void Draw();
void setPos(float x, float y, float z){};
void setRot(float x, float y, float z){};
void setScale(float x, float y, float z){};
};
void ASC::Load(char* filename){
ifstream fin(filename);
char b[256];
string buffer;
Vertex t;
Triangle tri;
fin>>buffer>>buffer>>buffer; //pass the named object line
fin>>buffer>>buffer; //reads past "tri-mesh" and "vertices"
fin>>(int)numVerts; //number of vertices
fin>>buffer; //reads past "buffer"
fin>>(int)numFaces; //number of faces
fin>>buffer>>buffer; //pass the vertex list line
//reads in vertices
for(int i=0;i<numVerts;i++){
fin>>buffer>>buffer>>buffer; //pass "vertex", "0:" and "X:"
fin>>(float)t.x;
fin>>buffer;
fin>>(float)t.y;
fin>>buffer;
fin>>(float)t.z;
vertices.push_back(t);
}
fin>>buffer>>buffer; //passes "Face list:"
//reads in the vertex indices
for(int i=0;i<numFaces;i++){
fin>>buffer>>buffer;
fin>>buffer; //get A:-
tri.data[0]=strip(buffer);
fin>>buffer; //get B:-
tri.data[1]=strip(buffer);
fin>>buffer; //get C:-
tri.data[2]=strip(buffer);
tris.push_back(tri);
fin>>buffer; //get AB:-
//tri.data[0]=strip(buffer);
fin>>buffer; //get BC:-
//tri.data[1]=strip(buffer);
fin>>buffer; //get CA:-
//tri.data[2]=strip(buffer);
//tris.push_back(tri);
memset(b,256,' ');
fin.getline(b,256); //reads material line
}
fin.close();
}
void ASC::Draw(){
glPushMatrix();
glColor3f(1.0,0.0,0.0);
glBegin(GL_TRIANGLES);
for(int i=0; i<numFaces; i++){
for(int j=0; j<3; j++){
glVertex3f(vertices[tris[i].data[j]].x,vertices[tris[i].data[j]].y,vertices[tris[i].data[j]].z);
}
}
glEnd();
glPopMatrix();
}
|