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


Log in to reply