www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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:
Mall_includes.hh | 1+
Mrules/batiment.cpp | 16++++++++--------
Mrules/chose.cpp | 10++++++++++
Mrules/chose.hh | 4++++
Mrules/rectangleroutes.cpp | 25+++++++++++--------------
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() {