glSpline/src/bspline.h
2018-10-10 16:20:54 +02:00

59 lines
1.6 KiB
C++

#ifndef BSPLINE_H
#define BSPLINE_H
#include "opengl_stuff.h"
#include <vector>
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<GLfloat> const & getVertices() const {return _vertices;}
std::vector<GLfloat> const & getNormals() const {return _normals;}
std::vector<GLuint> const & getIndices() const {return _indices;}
private:
// Vecteurs
std::vector<glm::vec3> _pointsDeControle;
std::vector<float> _vecteurNodal;
// Paramètres
int _k, _nbPtsCtrlX, _nbPtsCtrlZ;
float _stepX, _stepZ;
ESpline _typeSpline;
EPolygone _typePolygone;
EVecteurNodal _typeVecteur;
// Résultats
std::vector<GLfloat> _vertices;
std::vector<GLfloat> _normals;
std::vector<GLuint> _indices;
// B-spline
void calculerSpline1D();
void calculerSpline2D();
// Floraison récursive
glm::vec3 floraison(float u, int dec, int k, std::vector<glm::vec3> vecteursPointsControle);
// Polygone
void construirePolygone(EPolygone typePolygone, int nbPtsCtrlX, int nbPtsCtrlZ);
// Vecteur Nodal
void construireVecteurNodal(EVecteurNodal typeVecteur);
};
#endif // BSPLINE_H