#ifndef _GLUMODEL_H
#define _GLUMODEL_H
#include "vec.h"
#include "thing.h"
#include "poly.h"
#include <string>
class GenericModel : public Thing {
public:
bool visible;
GLUquadricObj* pt;
Vec* pos;
Vec* rot;
Material* mat;
float scale;
GenericModel();
GenericModel(Vec _pos, Material _mat);
void init(Vec _pos, Material _mat);
void setColor(Color* c);
void setMaterial(Color _amb);
void setMaterial(Color _amb, Color _spec);
void translate(Vec d);
void rotate(Vec r);
void show();
void hide();
};
class GluSphere : public GenericModel {
public:
float rad;
GluSphere();
GluSphere(Vec _pos, Material _mat, float _rad);
void init(Vec _pos, Material _mat, float _rad);
void draw();
};
class Fractal : public GenericModel {
public:
int iters;
float len;
Fractal();
void init(Vec pos, Material m, int _iters, float _len);
};
class SierpinskiPyramid : public Fractal {
private:
GLuint list;
public:
SierpinskiPyramid(Vec p, int iters, float len);
void construct(int n);
void draw();
void drawPyramid();
void buildList();
virtual ~SierpinskiPyramid();
};
class KochFractal : public Fractal {
public:
float multiplicity;
float mult_angle;
KochFractal(Vec pos, int iters, float len);
//TODO: move draw function to Fractal class, it's common for all
//inheriting fractals....
void draw();
void iter(float nbit);
};
#endif