?
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?