#ifndef BSPLINE_H #define BSPLINE_H #include "opengl_stuff.h" #include class BSpline { public: enum class ESpline {SPLINE1D, SPLINE2D}; enum class EPolygone {FIXE2D, RANDOM2D, GAUSSIEN3D, FIXE3D, RANDOM3D}; enum class EVecteurNodal {UNIFORME, OUVERTUNIFORME, QUELCONQUE}; BSpline(ESpline typeSpline = ESpline::SPLINE1D, int k = 3, EPolygone typePolygone = EPolygone::RANDOM2D, EVecteurNodal typeVecteur = EVecteurNodal::UNIFORME, int nbPtsCtrlX = 10, int nbPtsCtrlZ = 10, float stepX = 0.1, float stepZ = 0.1); std::vector const & getVertices() const {return _vertices;} std::vector const & getNormals() const {return _normals;} std::vector const & getIndices() const {return _indices;} private: // Vecteurs std::vector _pointsDeControle; std::vector _vecteurNodal; // Paramètres int _k, _nbPtsCtrlX, _nbPtsCtrlZ; float _stepX, _stepZ; ESpline _typeSpline; EPolygone _typePolygone; EVecteurNodal _typeVecteur; // Résultats std::vector _vertices; std::vector _normals; std::vector _indices; // B-spline void calculerSpline1D(); void calculerSpline2D(); // Floraison récursive glm::vec3 floraison(float u, int dec, int k, std::vector vecteursPointsControle); // Polygone void construirePolygone(EPolygone typePolygone, int nbPtsCtrlX, int nbPtsCtrlZ); // Vecteur Nodal void construireVecteurNodal(EVecteurNodal typeVecteur); }; #endif // BSPLINE_H