diff --git a/lod.cpp b/lod.cpp index 3a5e79f..02dbfc4 100644 --- a/lod.cpp +++ b/lod.cpp @@ -58,16 +58,17 @@ void Lod::setCamera(Vertex newCamera) { } void Lod::doSplit(Chose* c) { - if (c->split()) { - std::vector::iterator it; - for (it = c->children.begin(); it != c->children.end(); ++it) { - (*it)->triangulation(); - (*it)->updateAABB(); - // (*it)->drawAABB(); - addSplitCube((*it)); - } - addMergeCube(c); + c->split(); + std::vector::iterator it; + bool mergeCube = false; + for (it = c->children.begin(); it != c->children.end(); ++it) { + mergeCube = true; + (*it)->triangulation(); + (*it)->updateAABB(); + // (*it)->drawAABB(); + addSplitCube((*it)); } + addMergeCube(c); // else { // // Pour debug : quand on tente de split un objet qui ne peut // // pas l'ĂȘtre, on vire le dessin de sa splitBox. diff --git a/rules/arbre.cpp b/rules/arbre.cpp index 79e500c..e07fc8f 100644 --- a/rules/arbre.cpp +++ b/rules/arbre.cpp @@ -30,7 +30,7 @@ Arbre::Arbre(Vertex _start, Angle3D _rotation, float _length, Type _type) : star addEntropy((int)(type)); } -bool Arbre::split() { +void Arbre::split() { if (type == ARBRE && length > floatInRange(seed, -1, 10, 20)) { int nbBranches = 2 + (hash2(seed, -2) % 3); for (int i = 0; i < nbBranches; i++) { @@ -43,7 +43,6 @@ bool Arbre::split() { } addChild(new Arbre(start, rotation, length, TRONC)); } - return true; } void Arbre::triangulation() { diff --git a/rules/arbre.hh b/rules/arbre.hh index 34e5361..44288da 100644 --- a/rules/arbre.hh +++ b/rules/arbre.hh @@ -25,7 +25,7 @@ public: Arbre(Vertex _start, Quad plane); Arbre(Vertex _start, Triangle plane); Arbre(Vertex _start, Angle3D _rotation, float _length, Type _type = ARBRE); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); virtual float LODFactor(); diff --git a/rules/arche.cpp b/rules/arche.cpp index 9accaff..9f81674 100644 --- a/rules/arche.cpp +++ b/rules/arche.cpp @@ -13,17 +13,16 @@ ArcheQuad::ArcheQuad(Quad _c, float _height, float _start, float _end, Type _typ } } -bool ArcheQuad::split() { +void ArcheQuad::split() { if (type == PLAT) - return false; + return; if (std::abs(end - start) < 0.1 && std::abs(f(end) - f(start)) < 0.05) - return false; + return; float mid = (start + end) / 2; Vertex n = (c[NW] + c[NE]) / 2.f; Vertex s = (c[SE] + c[SW]) / 2.f; addChild(new ArcheQuad(Quad(n, s, c[SW], c[NW]), height, start, mid, type)); addChild(new ArcheQuad(Quad(c[NE], c[SE], s, n), height, mid, end, type)); - return true; } void ArcheQuad::triangulation() { diff --git a/rules/arche.hh b/rules/arche.hh index 9aac67d..2482f3b 100644 --- a/rules/arche.hh +++ b/rules/arche.hh @@ -19,7 +19,7 @@ private: Type type; public: ArcheQuad(Quad _c, float _height, float _start = 0, float _end = 1, Type _type = RANDOM); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); float f(float x); diff --git a/rules/batiment.cpp b/rules/batiment.cpp index 85e5d8b..0e7a9f4 100644 --- a/rules/batiment.cpp +++ b/rules/batiment.cpp @@ -7,7 +7,7 @@ BatimentQuad::BatimentQuad(Quad _c, bool _isSub, QuadBool _w) addEntropy(w[N+i] ? 0 : 1); } -bool BatimentQuad::split() { +void BatimentQuad::split() { if (!isSub) { bordureRouteTrottoir(); } else { @@ -21,8 +21,6 @@ bool BatimentQuad::split() { addChild(new TerrainQuad(c)); } } - - return true; } void BatimentQuad::bordureRouteTrottoir() { @@ -97,8 +95,8 @@ BatimentTri_::BatimentTri_(Triangle _c) : Chose(), c(_c) { addEntropy(c); } -bool BatimentTri_::split() { - return false; +void BatimentTri_::split() { + // TODO : BatimentTri::split() } void BatimentTri_::triangulation() { diff --git a/rules/batiment.hh b/rules/batiment.hh index 0c7bf69..4988151 100644 --- a/rules/batiment.hh +++ b/rules/batiment.hh @@ -14,7 +14,7 @@ private: public: BatimentQuad(Quad _c, bool _isSub = false, QuadBool _w = QuadBool(true, true, true, true)); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); BatimentQuad* isSubdivision(bool val); @@ -25,7 +25,7 @@ class BatimentTri_ : public Chose { public: BatimentTri_(Triangle _c); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); }; diff --git a/rules/chose.cpp b/rules/chose.cpp index e4c2616..c7a3b7c 100644 --- a/rules/chose.cpp +++ b/rules/chose.cpp @@ -26,9 +26,8 @@ void Chose::addChild(Chose* c) { children.push_back(c); } -bool Chose::merge() { +void Chose::merge() { clearChildren(); - return true; } void Chose::addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned int rgb) { diff --git a/rules/chose.hh b/rules/chose.hh index 838e59a..6106822 100644 --- a/rules/chose.hh +++ b/rules/chose.hh @@ -16,8 +16,8 @@ public : void display(); void displayNormals(); void drawAABB(); // DEBUG - virtual bool split() { return false; }; - virtual bool merge(); + virtual void split() {}; + virtual void merge(); virtual void triangulation() { clearTriangles(); }; virtual void updateAABB(); diff --git a/rules/etage.cpp b/rules/etage.cpp index 3930a8a..a6de9df 100644 --- a/rules/etage.cpp +++ b/rules/etage.cpp @@ -12,7 +12,7 @@ void EtageQuad::getBoundingBoxPoints() { addBBPoints(ch); } -bool EtageQuad::split() { +void EtageQuad::split() { if (nbEtages > 1 && etage == 0 && ((w[N] && w[S]) || (w[E] && w[W])) && c.minLengthEW() > 800 && proba(seed, 0, 0.8)) { Quad q = c << ((w[N] && w[S]) ? 0 : 1); Quad qh = ch << ((w[N] && w[S]) ? 0 : 1); @@ -61,7 +61,6 @@ bool EtageQuad::split() { } addChild(new PlancherPlafond(c, PlancherPlafond::PLANCHER)); addChild(new PlancherPlafond(ch.offsetNormal(-10), PlancherPlafond::PLAFOND)); - return true; } void EtageQuad::triangulation() { diff --git a/rules/etage.hh b/rules/etage.hh index 15952db..f7f12ff 100644 --- a/rules/etage.hh +++ b/rules/etage.hh @@ -14,7 +14,7 @@ class EtageQuad : public Chose { public : EtageQuad(Quad c, Quad ch, QuadBool _w, int _etage, int _nbEtages); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); }; diff --git a/rules/mur.cpp b/rules/mur.cpp index 0574830..24cba7f 100644 --- a/rules/mur.cpp +++ b/rules/mur.cpp @@ -25,9 +25,9 @@ void MurQuad::setWindowOrDoor() { windowPosh = Quad(wFront[NE],wBack[NE],wBack[NW],wFront[NW]); } -bool MurQuad::split() { +void MurQuad::split() { if(!(window || door)) - return false; + return; float length = c.maxLengthNS(); @@ -52,8 +52,6 @@ bool MurQuad::split() { addChild(new MurQuad(left,lefth,false)); addChild(new MurQuad(right,righth,false)); } - - return true; } void MurQuad::triangulation() { diff --git a/rules/mur.hh b/rules/mur.hh index 2598d98..27670b8 100644 --- a/rules/mur.hh +++ b/rules/mur.hh @@ -18,7 +18,7 @@ public : MurQuad(Quad c, Quad ch, bool _window=false, bool _top=false, bool _bottom=false, bool _door=false); virtual void triangulation(); - virtual bool split(); + virtual void split(); virtual void getBoundingBoxPoints(); void setWindowOrDoor(); }; diff --git a/rules/quartier.cpp b/rules/quartier.cpp index d50b487..2305286 100644 --- a/rules/quartier.cpp +++ b/rules/quartier.cpp @@ -8,7 +8,7 @@ void QuartierQuad::getBoundingBoxPoints() { addBBPoints(c, Dimensions::hauteurMaxBatiment); } -bool QuartierQuad::split() { +void QuartierQuad::split() { bool small = c.minLength() < 35 * 100; bool big = (c.minLengthNS() > 100 * 100 || c.minLengthEW() > 100 * 100) && c.minLength() > 40*100 && c.maxLength() < 300*100; bool isConcave = c.isConcave(); @@ -36,7 +36,6 @@ bool QuartierQuad::split() { carre(); else addChild(new BatimentQuad(c)); - return true; } void QuartierQuad::triangulation() { @@ -163,7 +162,7 @@ void QuartierTri::getBoundingBoxPoints() { addBBPoints(c, Dimensions::hauteurMaxBatiment); } -bool QuartierTri::split() { +void QuartierTri::split() { bool small = c.minLength() < 6000; bool big = c.maxLength() >= 10000; float minAngle = c.minAngle(); @@ -190,7 +189,6 @@ bool QuartierTri::split() { } else { batiments(); // TODO : addChild(new BatimentTri_(c)); } - return true; } void QuartierTri::triangulation() { diff --git a/rules/quartier.hh b/rules/quartier.hh index 8fb13aa..e299093 100644 --- a/rules/quartier.hh +++ b/rules/quartier.hh @@ -9,7 +9,7 @@ private: public: QuartierQuad(Quad _c); virtual void getBoundingBoxPoints(); - virtual bool split(); + virtual void split(); virtual void triangulation(); private: void triangulationConcave(Triangle t); @@ -28,7 +28,7 @@ private: public: QuartierTri(Triangle _c); virtual void getBoundingBoxPoints(); - virtual bool split(); + virtual void split(); virtual void triangulation(); private: void centre(); diff --git a/rules/terrain.cpp b/rules/terrain.cpp index 3e7118a..35b34e6 100644 --- a/rules/terrain.cpp +++ b/rules/terrain.cpp @@ -4,8 +4,8 @@ TerrainQuad::TerrainQuad(Quad _c, bool _addTrees) : Chose(), c(_c), addTrees(_ad addEntropy(c); } -bool TerrainQuad::split() { - if (!addTrees) return false; +void TerrainQuad::split() { + if (!addTrees) return; addChild(new TerrainQuad(c, false)); @@ -27,7 +27,6 @@ bool TerrainQuad::split() { for (int i = 0; i < pi; i++) { addChild(new Arbre(p[i], c)); } - return true; } void TerrainQuad::getBoundingBoxPoints() { diff --git a/rules/terrain.hh b/rules/terrain.hh index da0d93b..a845df2 100644 --- a/rules/terrain.hh +++ b/rules/terrain.hh @@ -20,7 +20,7 @@ class TerrainQuad : public Chose { public : TerrainQuad(Quad _c, bool _addTrees = true); - virtual bool split(); + virtual void split(); virtual void triangulation(); virtual void getBoundingBoxPoints(); };