absence_thelab

annotate src/common/curves.h @ 0:1cffe3409164

initial commit
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 23 Oct 2014 01:46:07 +0300
parents
children
rev   line source
nuclear@0 1 #ifndef _CURVES_H_
nuclear@0 2 #define _CURVES_H_
nuclear@0 3
nuclear@0 4 #include <string>
nuclear@0 5 #include "n3dmath.h"
nuclear@0 6 #include "linkedlist.h"
nuclear@0 7
nuclear@0 8 class Curve {
nuclear@0 9 protected:
nuclear@0 10 LinkedList<Vector3> ControlPoints;
nuclear@0 11 Vector2 *Samples; // used for parametrizing by arc length
nuclear@0 12 int SampleCount;
nuclear@0 13 bool ArcParametrize;
nuclear@0 14
nuclear@0 15 Curve *ease_curve; // ease in/out curve (1D, x&z discarded)
nuclear@0 16 int ease_sample_count, ease_step;
nuclear@0 17
nuclear@0 18 void SampleArcLengths();
nuclear@0 19 float Parametrize(float t);
nuclear@0 20 float Ease(float t);
nuclear@0 21
nuclear@0 22 public:
nuclear@0 23 std::string name;
nuclear@0 24
nuclear@0 25 Curve();
nuclear@0 26 ~Curve();
nuclear@0 27 virtual void AddControlPoint(const Vector3 &cp);
nuclear@0 28
nuclear@0 29 virtual int GetSegmentCount() const = 0;
nuclear@0 30 virtual void SetArcParametrization(bool state);
nuclear@0 31 virtual void SetEaseCurve(Curve *curve);
nuclear@0 32 virtual void SetEaseSampleCount(int count);
nuclear@0 33
nuclear@0 34 virtual Vector3 Interpolate(float t) = 0;
nuclear@0 35 };
nuclear@0 36
nuclear@0 37 class BSpline : public Curve {
nuclear@0 38 public:
nuclear@0 39 virtual int GetSegmentCount() const;
nuclear@0 40 virtual Vector3 Interpolate(float t);
nuclear@0 41 };
nuclear@0 42
nuclear@0 43 class CatmullRomSpline : public Curve {
nuclear@0 44 public:
nuclear@0 45 virtual int GetSegmentCount() const;
nuclear@0 46 virtual Vector3 Interpolate(float t);
nuclear@0 47 };
nuclear@0 48
nuclear@0 49
nuclear@0 50 #endif // _CURVES_H_