Renomage de la fonction subdivide en split et ajout de la fonction de

merge.
This commit is contained in:
Yoann 2011-12-18 14:35:49 +01:00
parent d171be9892
commit 80aad0bd14
26 changed files with 232 additions and 27 deletions

View File

@ -10,7 +10,7 @@
// -> bâtiment dans le "bout" le plus "étroit", et lignes dans une seule direction dans le reste. // -> bâtiment dans le "bout" le plus "étroit", et lignes dans une seule direction dans le reste.
void recursiveSubdivide(Chose* c) { void recursiveSubdivide(Chose* c) {
if (c->subdivide()) { if (c->split()) {
std::vector<Chose*>::iterator it; std::vector<Chose*>::iterator it;
for (it = c->children.begin(); it != c->children.end(); ++it) { for (it = c->children.begin(); it != c->children.end(); ++it) {
recursiveSubdivide(*it); recursiveSubdivide(*it);
@ -27,7 +27,7 @@ int main() {
Vertex sw(0, 0, 0); Vertex sw(0, 0, 0);
Vertex nw(0, size, 0); Vertex nw(0, size, 0);
Chose* c = QuartierQuad::factory(Chose::initialSeed, 0, ne, se, sw, nw); Chose* c = QuartierQuad::factory(Chose::initialSeed, 0, ne, se, sw, nw);
// c->subdivide(); // c->split();
recursiveSubdivide(c); recursiveSubdivide(c);
View *v = new View(c); View *v = new View(c);

View File

@ -10,6 +10,13 @@ BatimentQuad::BatimentQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, Cardinal
triangulation(); triangulation();
} }
BatimentQuad::~BatimentQuad() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
int BatimentQuad::width() { return this->ne.x - this->sw.x; } int BatimentQuad::width() { return this->ne.x - this->sw.x; }
int BatimentQuad::height() { return this->ne.y - this->sw.y; } int BatimentQuad::height() { return this->ne.y - this->sw.y; }
@ -18,11 +25,19 @@ std::vector<Vertex*> BatimentQuad::getBoundingBoxPoints() const {
return list; return list;
} }
bool BatimentQuad::subdivide() { bool BatimentQuad::split() {
factory(1,1,ne,se,sw,nw); factory(1,1,ne,se,sw,nw);
return true; return true;
} }
bool BatimentQuad::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw) { Chose* BatimentQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw) {
int th = 20; // Terrain height. int th = 20; // Terrain height.
Quad q = Quad(ne,se,sw,nw); Quad q = Quad(ne,se,sw,nw);

View File

@ -17,9 +17,11 @@ class BatimentQuad : public Chose {
static const int maxHeight = 800; static const int maxHeight = 800;
BatimentQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, Cardinal door); BatimentQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, Cardinal door);
virtual ~BatimentQuad();
int width(); int width();
int height(); int height();
virtual bool subdivide(); virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;

View File

@ -5,6 +5,13 @@ BatimentQuadJardin::BatimentQuadJardin(Vertex ne, Vertex se, Vertex sw, Vertex n
triangulation(); triangulation();
} }
BatimentQuadJardin::~BatimentQuadJardin() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
int BatimentQuadJardin::width() { return this->ne.x - this->sw.x; } int BatimentQuadJardin::width() { return this->ne.x - this->sw.x; }
int BatimentQuadJardin::height() { return this->ne.y - this->sw.y; } int BatimentQuadJardin::height() { return this->ne.y - this->sw.y; }
@ -14,11 +21,19 @@ std::vector<Vertex*> BatimentQuadJardin::getBoundingBoxPoints() const {
return list; return list;
} }
bool BatimentQuadJardin::subdivide() { bool BatimentQuadJardin::split() {
return true; return true;
} }
bool BatimentQuadJardin::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void BatimentQuadJardin::triangulation() { void BatimentQuadJardin::triangulation() {
triangles.reserve(2); triangles.reserve(2);

View File

@ -16,9 +16,11 @@ class BatimentQuadJardin : public Chose {
static const int maxHeight = 800; static const int maxHeight = 800;
BatimentQuadJardin(Vertex ne, Vertex se, Vertex sw, Vertex nw); BatimentQuadJardin(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual ~BatimentQuadJardin();
int width(); int width();
int height(); int height();
virtual bool subdivide(); virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;

View File

@ -5,6 +5,13 @@ BatimentQuadMaison::BatimentQuadMaison(Vertex ne, Vertex se, Vertex sw, Vertex n
triangulation(); triangulation();
} }
BatimentQuadMaison::~BatimentQuadMaison() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
int BatimentQuadMaison::width() { return this->ne.x - this->sw.x; } int BatimentQuadMaison::width() { return this->ne.x - this->sw.x; }
int BatimentQuadMaison::height() { return this->ne.y - this->sw.y; } int BatimentQuadMaison::height() { return this->ne.y - this->sw.y; }
@ -14,11 +21,19 @@ std::vector<Vertex*> BatimentQuadMaison::getBoundingBoxPoints() const {
return list; return list;
} }
bool BatimentQuadMaison::subdivide() { bool BatimentQuadMaison::split() {
return true; return true;
} }
bool BatimentQuadMaison::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void BatimentQuadMaison::triangulation() { void BatimentQuadMaison::triangulation() {
triangles.reserve(12); triangles.reserve(12);

View File

@ -16,9 +16,11 @@ class BatimentQuadMaison : public Chose {
static const int maxHeight = 800; static const int maxHeight = 800;
BatimentQuadMaison(Vertex ne, Vertex se, Vertex sw, Vertex nw); BatimentQuadMaison(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual ~BatimentQuadMaison();
int width(); int width();
int height(); int height();
virtual bool subdivide(); virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;

View File

@ -16,7 +16,8 @@ class Chose {
public : public :
void display(); void display();
virtual bool subdivide() = 0; virtual bool split() = 0;
virtual bool merge() = 0;
protected : protected :
Chose(); Chose();

View File

@ -8,6 +8,13 @@ QuartierQuad::QuartierQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw) : Chose()
corner[NW] = nw; corner[NW] = nw;
} }
QuartierQuad::~QuartierQuad() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> QuartierQuad::getBoundingBoxPoints() const { std::vector<Vertex*> QuartierQuad::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
@ -38,10 +45,18 @@ Chose* QuartierQuad::factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, V
} }
} }
bool QuartierQuad::subdivide() { bool QuartierQuad::split() {
return false; return false;
} }
bool QuartierQuad::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void QuartierQuad::triangulation() { void QuartierQuad::triangulation() {
triangles.reserve(2); triangles.reserve(2);
addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], 0xc0, 0xc0, 0xc0)); addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], 0xc0, 0xc0, 0xc0));

View File

@ -9,7 +9,9 @@ public:
Vertex corner[4]; Vertex corner[4];
public: public:
QuartierQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw); QuartierQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~QuartierQuad();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
static Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw); static Chose* factory(int seed, int n, Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;

View File

@ -4,12 +4,19 @@ QuartierQuadAngle::QuartierQuadAngle(Vertex ne, Vertex se, Vertex sw, Vertex nw)
triangulation(); triangulation();
} }
QuartierQuadAngle::~QuartierQuadAngle() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> QuartierQuadAngle::getBoundingBoxPoints() const { std::vector<Vertex*> QuartierQuadAngle::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool QuartierQuadAngle::subdivide() { bool QuartierQuadAngle::split() {
for (int i = 0; i < 4; i++) { for (int i = 0; i < 4; i++) {
if (Triangle(corner[NW+i], corner[NE+i], corner[SE+i]).angle() >= Angle::d2r(130)) { if (Triangle(corner[NW+i], corner[NE+i], corner[SE+i]).angle() >= Angle::d2r(130)) {
Triangle t1(corner[NE+i], corner[SE+i], corner[SW+i]); Triangle t1(corner[NE+i], corner[SE+i], corner[SW+i]);
@ -59,3 +66,11 @@ bool QuartierQuadAngle::subdivide() {
addChild(new TerrainQuadHerbe(corner[NE], corner[SE], corner[SW], corner[NW])); addChild(new TerrainQuadHerbe(corner[NE], corner[SE], corner[SW], corner[NW]));
return true; return true;
} }
bool QuartierQuadAngle::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}

View File

@ -10,7 +10,9 @@ class QuartierQuadAngle : public QuartierQuad {
public : public :
QuartierQuadAngle(Vertex ne, Vertex se, Vertex sw, Vertex nw); QuartierQuadAngle(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~QuartierQuadAngle();
virtual bool split();
virtual bool merge();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
private : private :

View File

@ -3,12 +3,19 @@
QuartierQuadCarre::QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) { QuartierQuadCarre::QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) {
} }
QuartierQuadCarre::~QuartierQuadCarre() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> QuartierQuadCarre::getBoundingBoxPoints() const { std::vector<Vertex*> QuartierQuadCarre::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool QuartierQuadCarre::subdivide() { bool QuartierQuadCarre::split() {
Vertex middle[4]; Vertex middle[4];
Quad q[4]; Quad q[4];
@ -30,3 +37,11 @@ bool QuartierQuadCarre::subdivide() {
} }
return true; return true;
} }
bool QuartierQuadCarre::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}

View File

@ -10,7 +10,9 @@ class QuartierQuadCarre : public QuartierQuad {
public : public :
QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw); QuartierQuadCarre(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~QuartierQuadCarre();
virtual bool split();
virtual bool merge();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };

View File

@ -3,12 +3,19 @@
QuartierQuadRect::QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) { QuartierQuadRect::QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw) : QuartierQuad(ne, se, sw, nw) {
} }
QuartierQuadRect::~QuartierQuadRect() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> QuartierQuadRect::getBoundingBoxPoints() const { std::vector<Vertex*> QuartierQuadRect::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool QuartierQuadRect::subdivide() { bool QuartierQuadRect::split() {
Vertex n = Segment(corner[NW], corner[NE]).randomPos(seed, 0, 33, 67); Vertex n = Segment(corner[NW], corner[NE]).randomPos(seed, 0, 33, 67);
Vertex s = Segment(corner[SE], corner[SW]).randomPos(seed, 1, 33, 67); Vertex s = Segment(corner[SE], corner[SW]).randomPos(seed, 1, 33, 67);
@ -22,3 +29,11 @@ bool QuartierQuadRect::subdivide() {
addChild(QuartierQuad::factory(seed, 3, qw.corner[0], qw.corner[1], qw.corner[2], qw.corner[3])); addChild(QuartierQuad::factory(seed, 3, qw.corner[0], qw.corner[1], qw.corner[2], qw.corner[3]));
return true; return true;
} }
bool QuartierQuadRect::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}

View File

@ -10,7 +10,9 @@ class QuartierQuadRect : public QuartierQuad {
public : public :
QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw); QuartierQuadRect(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~QuartierQuadRect();
virtual bool split();
virtual bool merge();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };

View File

@ -8,6 +8,13 @@ QuartierTri::QuartierTri(Vertex left, Vertex top, Vertex right) : Chose() {
triangulation(); triangulation();
} }
QuartierTri::~QuartierTri() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> QuartierTri::getBoundingBoxPoints() const { std::vector<Vertex*> QuartierTri::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
@ -20,10 +27,18 @@ Chose* QuartierTri::factory(int seed, int n, Vertex left, Vertex top, Vertex rig
return new QuartierTri(left, top, right); return new QuartierTri(left, top, right);
} }
bool QuartierTri::subdivide() { bool QuartierTri::split() {
return false; return false;
} }
bool QuartierTri::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void QuartierTri::triangulation() { void QuartierTri::triangulation() {
triangles.reserve(1); triangles.reserve(1);
addTriangle(new Triangle(corner[0], corner[1], corner[2], 0xf0, 0xc0, 0xc0)); addTriangle(new Triangle(corner[0], corner[1], corner[2], 0xf0, 0xc0, 0xc0));

View File

@ -10,7 +10,9 @@ class QuartierTri : public Chose {
public : public :
QuartierTri(Vertex left, Vertex top, Vertex right); QuartierTri(Vertex left, Vertex top, Vertex right);
virtual bool subdivide(); virtual ~QuartierTri();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
static Chose* factory(int seed, int n, Vertex left, Vertex top, Vertex right); static Chose* factory(int seed, int n, Vertex left, Vertex top, Vertex right);
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;

View File

@ -5,16 +5,31 @@ RouteQuadCarrefour::RouteQuadCarrefour(Vertex ne, Vertex se, Vertex sw, Vertex n
triangulation(); triangulation();
} }
RouteQuadCarrefour::~RouteQuadCarrefour() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> RouteQuadCarrefour::getBoundingBoxPoints() const { std::vector<Vertex*> RouteQuadCarrefour::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool RouteQuadCarrefour::subdivide() { bool RouteQuadCarrefour::split() {
// TODO // TODO
return false; return false;
} }
bool RouteQuadCarrefour::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void RouteQuadCarrefour::triangulation() { void RouteQuadCarrefour::triangulation() {
triangles.reserve(2); triangles.reserve(2);
addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36)); addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36));

View File

@ -12,7 +12,9 @@ class RouteQuadCarrefour : public Chose {
public : public :
RouteQuadCarrefour(Vertex ne, Vertex se, Vertex sw, Vertex nw); RouteQuadCarrefour(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~RouteQuadCarrefour();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };

View File

@ -4,16 +4,31 @@ RouteQuadChaussee::RouteQuadChaussee(Vertex ne, Vertex se, Vertex sw, Vertex nw)
triangulation(); triangulation();
} }
RouteQuadChaussee::~RouteQuadChaussee() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> RouteQuadChaussee::getBoundingBoxPoints() const { std::vector<Vertex*> RouteQuadChaussee::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool RouteQuadChaussee::subdivide() { bool RouteQuadChaussee::split() {
// TODO // TODO
return false; return false;
} }
bool RouteQuadChaussee::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void RouteQuadChaussee::triangulation() { void RouteQuadChaussee::triangulation() {
triangles.reserve(2); triangles.reserve(2);
addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36)); addTriangle(new Triangle(ne, nw, sw, 0x36, 0x36, 0x36));

View File

@ -12,7 +12,9 @@ class RouteQuadChaussee : public Chose {
public : public :
RouteQuadChaussee(Vertex ne, Vertex se, Vertex sw, Vertex nw); RouteQuadChaussee(Vertex ne, Vertex se, Vertex sw, Vertex nw);
virtual bool subdivide(); virtual ~RouteQuadChaussee();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };

View File

@ -10,16 +10,31 @@ TrottoirQuadNormal::TrottoirQuadNormal(Vertex ne, Vertex se, Vertex sw, Vertex n
triangulation(); triangulation();
} }
TrottoirQuadNormal::~TrottoirQuadNormal() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> TrottoirQuadNormal::getBoundingBoxPoints() const { std::vector<Vertex*> TrottoirQuadNormal::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
} }
bool TrottoirQuadNormal::subdivide() { bool TrottoirQuadNormal::split() {
// TODO // TODO
return false; return false;
} }
bool TrottoirQuadNormal::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void TrottoirQuadNormal::triangulation() { void TrottoirQuadNormal::triangulation() {
Vertex h = Vertex(0,0,height); Vertex h = Vertex(0,0,height);
Quad q = Quad(ne,se,sw,nw); Quad q = Quad(ne,se,sw,nw);

View File

@ -14,7 +14,9 @@ class TrottoirQuadNormal : public Chose {
public : public :
TrottoirQuadNormal(Vertex ne, Vertex se, Vertex sw, Vertex nw, int height, Cardinal border); TrottoirQuadNormal(Vertex ne, Vertex se, Vertex sw, Vertex nw, int height, Cardinal border);
virtual bool subdivide(); virtual ~TrottoirQuadNormal();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };

View File

@ -9,6 +9,13 @@ TerrainQuadHerbe::TerrainQuadHerbe(Vertex ne, Vertex se, Vertex sw, Vertex nw) :
triangulation(); triangulation();
} }
TerrainQuadHerbe::~TerrainQuadHerbe() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
}
std::vector<Vertex*> TerrainQuadHerbe::getBoundingBoxPoints() const { std::vector<Vertex*> TerrainQuadHerbe::getBoundingBoxPoints() const {
std::vector<Vertex*> list; std::vector<Vertex*> list;
return list; return list;
@ -23,10 +30,18 @@ TerrainQuadHerbe::TerrainQuadHerbe(int red, Vertex ne, Vertex se, Vertex sw, Ver
triangulation(); triangulation();
} }
bool TerrainQuadHerbe::subdivide() { bool TerrainQuadHerbe::split() {
return false; return false;
} }
bool TerrainQuadHerbe::merge() {
for(unsigned int i = 0; i < children.size(); i++)
delete(children[i]);
children.clear();
triangles.clear();
return true;
}
void TerrainQuadHerbe::triangulation() { void TerrainQuadHerbe::triangulation() {
triangles.reserve(2); triangles.reserve(2);
addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], red, 0xaa, 0x22)); addTriangle(new Triangle(corner[NE], corner[NW], corner[SW], red, 0xaa, 0x22));

View File

@ -12,7 +12,9 @@ class TerrainQuadHerbe : public Chose {
public : public :
TerrainQuadHerbe(Vertex ne, Vertex se, Vertex sw, Vertex nw); TerrainQuadHerbe(Vertex ne, Vertex se, Vertex sw, Vertex nw);
TerrainQuadHerbe(int red, Vertex ne, Vertex se, Vertex sw, Vertex nw); // DEBUG TerrainQuadHerbe(int red, Vertex ne, Vertex se, Vertex sw, Vertex nw); // DEBUG
virtual bool subdivide(); virtual ~TerrainQuadHerbe();
virtual bool split();
virtual bool merge();
virtual void triangulation(); virtual void triangulation();
virtual std::vector<Vertex*> getBoundingBoxPoints() const; virtual std::vector<Vertex*> getBoundingBoxPoints() const;
}; };