C++ deCasteljau obj. Loader
-
Hallo zusammen,
ich arbeite grad daran eine Bezierkurve mit dem deCasteljau algorithmus in C++ zu programmieren. Das ganze soll eine .obj Datei laden, die die Daten einer Bezierkurve hat.
Das ganze soll dann später über Opengl gezeichnet werden, aber erstmal muss die Objloader Klasse in c++ stehen.Die Datei ist dann so aufgebaut z.B.:
v 0.0 0.0 0.0 v 0.0 1.0 0.0 v 1.0 1.0 0.0 v 1.0 0.0 0.0 cstype bezier deg 3 curv 1 2 3 4 end
Ich habe schon ein Grundgerüst der Klasse Objloader, aber ich weiß nicht wie ich die deg, curv und ctype implementieren soll.
Also die Klasse sieht ungefähr so aus:
struct Vertex { float x,y,z; public: //vertex = Punktkoordinate Vertex(float gx=0, float gy=0, float gz=0) { x=gx;y=gy;z=gz; } void Add(Vertex v) { x+=v.x; y+=v.y; z+=v.z; } }; struct UV { float s,t; }; struct Face { unsigned short a, b, c; }; //hier bin ich mir unsicher .......... struct Degree { float d; }; struct Curve { float v; int order; struct Vertex vertex[]; }; class Mesh { friend class ObjLoader; public: Mesh(); ~Mesh(); float* GetVertexPointer(); float* GetNormalPointer(); float* GetTexCoordPointer(); unsigned short* GetIndexPointer(); unsigned int GetFacesSize(); unsigned int GetVerticesSize(); unsigned int GetUVSize(); unsigned int GetNormalsSize(); void CalcNormals(); private: string name; vector<Vertex> vertices; vector<Vertex> normals; vector<UV> uvs; vector<Face> faces; };
Die If-Abfragen würde ich so machen:
if(prefix.compare("cstype")== 0) { line = line.find_first_of("bezier") != -1; continue; }
Kann mir einer da helfen?