commit dfbdee7b7d381882c548366a6e51858325c14e3e
parent 699e0fa52006f8358ab08d8742e5a8524cb02079
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Thu, 24 Nov 2011 14:46:11 +0100
Préparation pour le stockage des enfants et triangles de chaque noeud.
Diffstat:
5 files changed, 34 insertions(+), 22 deletions(-)
diff --git a/all_includes.hh b/all_includes.hh
@@ -3,6 +3,7 @@
#include <iostream>
#include <math.h>
+#include <vector>
#include "vertex.hh"
#include "segment.hh"
diff --git a/rules/batiment.cpp b/rules/batiment.cpp
@@ -27,16 +27,16 @@ void Batiment::triangulation() {
Vertex toit = (ah + bh + ch + dh) / 4 + Vertex(0,0,h/5);
// 4 Murs
- new Triangle(a,bh,ah); new Triangle(a,b,bh); // a-b-bh-ah
- new Triangle(b,dh,bh); new Triangle(b,d,dh); // b-d-dh-bh
- new Triangle(d,ch,dh); new Triangle(d,c,ch); // d-c-ch-dh
- new Triangle(c,ah,ch); new Triangle(c,a,ah); // c-a-ah-ch
+ addTriangle(new Triangle(a,bh,ah)); addTriangle(new Triangle(a,b,bh)); // a-b-bh-ah
+ addTriangle(new Triangle(b,dh,bh)); addTriangle(new Triangle(b,d,dh)); // b-d-dh-bh
+ addTriangle(new Triangle(d,ch,dh)); addTriangle(new Triangle(d,c,ch)); // d-c-ch-dh
+ addTriangle(new Triangle(c,ah,ch)); addTriangle(new Triangle(c,a,ah)); // c-a-ah-ch
// 1 Toit
- new Triangle(ah,toit,bh);
- new Triangle(bh,toit,dh);
- new Triangle(dh,toit,ch);
- new Triangle(ch,toit,ah);
+ addTriangle(new Triangle(ah,toit,bh));
+ addTriangle(new Triangle(bh,toit,dh));
+ addTriangle(new Triangle(dh,toit,ch));
+ addTriangle(new Triangle(ch,toit,ah));
}
std::ostream& operator<<(std::ostream& os, const Batiment* r) {
diff --git a/rules/chose.cpp b/rules/chose.cpp
@@ -10,3 +10,13 @@ std::ostream& operator<<(std::ostream& os, const Chose& r) {
(void)r; // unused
return os << "Chose";
}
+
+void Chose::addChild(Chose* c) {
+ children.insert(children.end(), c);
+ // TODO : Ajouter c dans une file d'attente des éléments pouvant être split.
+}
+
+void Chose::addTriangle(Triangle* t) {
+ triangles.insert(triangles.end(), t);
+ // TODO : Ajouter t dans la liste des triangles à envoyer au GPU.
+}
diff --git a/rules/chose.hh b/rules/chose.hh
@@ -8,6 +8,8 @@ class Chose {
public:
static const unsigned int initialSeed = 42;
unsigned int seed;
+ std::vector<Chose*> children;
+ std::vector<Triangle*> triangles;
public:
Chose();
inline void addEntropy(unsigned int x1) { seed = hash2(seed, x1); }
@@ -18,6 +20,8 @@ public:
inline void addEntropy(Vertex v1, Vertex v2) { addEntropy(v1); addEntropy(v2); }
inline void addEntropy(Vertex v1, Vertex v2, Vertex v3) { addEntropy(v1, v2); addEntropy(v3); }
inline void addEntropy(Vertex v1, Vertex v2, Vertex v3, Vertex v4) { addEntropy(v1, v2); addEntropy(v3, v4); }
+ void addChild(Chose* c);
+ void addTriangle(Triangle* t);
virtual void subdivide() = 0;
virtual void triangulation() = 0;
};
diff --git a/rules/rectangleroutes.cpp b/rules/rectangleroutes.cpp
@@ -16,27 +16,24 @@ void RectangleRoutes::subdivide() {
hashInRange(this->seed, 1, this->sw.y + this->height()*1/4, this->sw.y + this->height()*3/4),
0 // TODO
);
- Carrefour c(split + Vertex(1,1,0), split + Vertex(1,-1,0), split + Vertex(-1,-1,0), split + Vertex(-1,1,0));
+ // TODO : addChild(…);
+ new Carrefour(split + Vertex(1,1,0), split + Vertex(1,-1,0), split + Vertex(-1,-1,0), split + Vertex(-1,1,0));
// routes au NESW du carrefour
// TODO : la plupart des zéros en z sont faux…
Vertex roadEndN(this->ne.y, split.x, 0);
Vertex roadEndE(this->ne.x, split.y, 0);
Vertex roadEndS(this->sw.y, split.x, 0);
Vertex roadEndW(this->sw.x, split.y, 0);
- Route rn(roadEndN + Vertex(-1,0,0), roadEndN + Vertex(+1,0,0), split + Vertex(+1,+1,0), split + Vertex(-1,+1,0));
- Route re(roadEndE + Vertex(0,+1,0), roadEndE + Vertex(0,-1,0), split + Vertex(+1,-1,0), split + Vertex(+1,+1,0));
- Route rs(roadEndS + Vertex(+1,0,0), roadEndS + Vertex(-1,0,0), split + Vertex(-1,-1,0), split + Vertex(+1,-1,0));
- Route rw(roadEndW + Vertex(0,-1,0), roadEndW + Vertex(0,+1,0), split + Vertex(-1,+1,0), split + Vertex(-1,-1,0));
+ // TODO : addChild(…);
+ Route* rn = new Route(roadEndN + Vertex(-1,0,0), roadEndN + Vertex(+1,0,0), split + Vertex(+1,+1,0), split + Vertex(-1,+1,0)); // N
+ Route* re = new Route(roadEndE + Vertex(0,+1,0), roadEndE + Vertex(0,-1,0), split + Vertex(+1,-1,0), split + Vertex(+1,+1,0)); // E
+ Route* rs = new Route(roadEndS + Vertex(+1,0,0), roadEndS + Vertex(-1,0,0), split + Vertex(-1,-1,0), split + Vertex(+1,-1,0)); // S
+ Route* rw = new Route(roadEndW + Vertex(0,-1,0), roadEndW + Vertex(0,+1,0), split + Vertex(-1,+1,0), split + Vertex(-1,-1,0)); // W
// Sous-quartiers
- Chose* rrne = sub(this->ne, re.corners[NW]);
- Chose* rrse = sub(re.corners[SE], rs.corners[SE]);
- Chose* rrsw = sub(rs.corners[NW], this->sw);
- Chose* rrnw = sub(Vertex(this->sw.x, this->ne.y, 0), rn.corners[SW]);
- // TODO : stocker ces objets quelque part.
- (void)rrne;
- (void)rrse;
- (void)rrsw;
- (void)rrnw;
+ addChild(sub(rn->corners[NE], re->corners[NE])); // sous-quartier NE
+ addChild(sub(re->corners[SE], rs->corners[SE])); // sous-quartier SE
+ addChild(sub(rs->corners[SW], rw->corners[SW])); // sous-quartier SW
+ addChild(sub(rw->corners[NW], rn->corners[NW])); // sous-quartier NW
}
void RectangleRoutes::triangulation() {