59 lines
1.6 KiB
C++
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
|