1
0
Fork 0
mirror of https://github.com/AquariaOSE/Aquaria.git synced 2024-11-25 17:53:47 +00:00
Aquaria/BBGE/SplineGrid.h
2022-09-05 17:19:34 +02:00

63 lines
1.2 KiB
C++

#ifndef BBGE_SPLINEGRID_H
#define BBGE_SPLINEGRID_H
#include <vector>
#include "Vector.h"
#include "glm/glm.hpp"
#include "Quad.h"
enum SplineType
{
SPLINE_BSPLINE,
SPLINE_COSINE,
};
class SplineGridCtrlPoint : public Quad
{
public:
SplineGridCtrlPoint();
virtual void onUpdate(float dt) OVERRIDE;
Vector getSplinePosition() const;
static SplineGridCtrlPoint *movingPoint;
};
class SplineGrid : public Quad
{
public:
typedef Vector value_type;
SplineGrid();
~SplineGrid();
// # of control points on each axis
void resize(size_t w, size_t h, size_t xres, size_t yres);
void recalc();
void resetControlPoints();
virtual void onRender(const RenderState& rs) const OVERRIDE;
virtual void onUpdate(float dt) OVERRIDE;
private:
void recalcBSpline();
void recalcCosine();
SplineGridCtrlPoint *createControlPoint(size_t x, size_t y);
unsigned degreeX, degreeY;
std::vector<float> knotsX, knotsY;
std::vector<value_type> tmp; // X-axis temporary values
size_t _cpx, _cpy; // # of control points
size_t _xres; // resolution for x-axis eval before doing 2D expansion
size_t _yres;
std::vector<SplineGridCtrlPoint*> ctrlp;
SplineType splinetype;
};
#endif