diff --git a/all_includes.hh b/all_includes.hh index 6888278..efcc417 100644 --- a/all_includes.hh +++ b/all_includes.hh @@ -37,6 +37,8 @@ class Chose; #include "rules/architecture/arche.hh" #include "rules/architecture/toit.hh" #include "rules/architecture/quartier.hh" +#include "rules/architecture/terrain.hh" +#include "rules/architecture/routetrottoir.hh" #include "rules/batiment/batimentquad.hh" #include "rules/batiment/batimentquadmaison.hh" @@ -49,12 +51,4 @@ class Chose; #include "rules/batiment/batimentquadmur.hh" #include "rules/batiment/batimentquadfenetre.hh" -#include "rules/route/routetrottoirquad.hh" -#include "rules/route/routetrottoirtri.hh" -#include "rules/route/routequadchaussee.hh" -#include "rules/route/trottoirquadnormal.hh" - -#include "rules/terrain/terrainquadherbe.hh" -#include "rules/terrain/terraintriherbe.hh" - #endif diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp index 69a3822..c07e4e5 100644 --- a/rules/architecture/quartier.cpp +++ b/rules/architecture/quartier.cpp @@ -5,7 +5,7 @@ QuartierQuad_::QuartierQuad_(Quad _c) : Chose(), c(_c) { } void QuartierQuad_::getBoundingBoxPoints() { - addBBPoints(c, 6000); // TODO : factoriser cette longueur (hauteur max des bâtiments). + addBBPoints(c, 600); // TODO : factoriser cette longueur (hauteur max des bâtiments). } bool QuartierQuad_::split() { @@ -32,7 +32,7 @@ bool QuartierQuad_::split() { void QuartierQuad_::triangulation() { Quad ci = c.insetNESW(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). - Quad cih = c.offsetNormal(6000); // TODO : factoriser cette longueur (hauteur max des bâtiments). + Quad cih = c.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). addGPUQuad(c, 0x36, 0x36, 0x36); // TODO : factoriser cette couleur (couleur de la route). addGPUQuad(cih, 0xF1, 0xE0, 0xE0); // TODO : factoriser cette couleur (couleur des toits). for (int i = 0; i < 4; i++) @@ -91,8 +91,8 @@ void QuartierQuad_::batiments() { Quad qbatiments = qinterieur.offsetNormal(hauteurTrottoir); for (int i = 0; i < 4; i++) { - addChild(new RouteQuadChaussee(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i]))); - addChild(new TrottoirQuadNormal(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qinterieur[SE+i],qinterieur[NE+i]),hauteurTrottoir)); + addChild(new RouteQuad(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i]))); + addChild(new TrottoirQuad(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qinterieur[SE+i],qinterieur[NE+i]),hauteurTrottoir)); } // TODO : @@ -102,11 +102,11 @@ void QuartierQuad_::batiments() { bool anglesAcceptable = c.minAngle() > Angle::d2r(90-60) && c.maxAngle() < Angle::d2r(90+60); if (!big && proba(seed, 0, 1, 20)) { - addChild(new TerrainQuadHerbe(qbatiments)); + addChild(new TerrainQuad(qbatiments)); } else if (small && anglesAcceptable) { addChild(new BatimentQuad(qbatiments)); } else { - addChild(new TerrainQuadHerbe(qbatiments)); + addChild(new TerrainQuad(qbatiments)); } } @@ -115,7 +115,7 @@ QuartierTri_::QuartierTri_(Triangle _c) : Chose(), c(_c) { } void QuartierTri_::getBoundingBoxPoints() { - addBBPoints(c, 6000); // TODO : factoriser cette longueur (hauteur max des bâtiments). + addBBPoints(c, 600); // TODO : factoriser cette longueur (hauteur max des bâtiments). } bool QuartierTri_::split() { @@ -150,7 +150,7 @@ bool QuartierTri_::split() { void QuartierTri_::triangulation() { Triangle ci = c.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). - Triangle cih = c.offsetNormal(6000); // TODO : factoriser cette longueur (hauteur max des bâtiments). + Triangle cih = c.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). addGPUTriangle(c, 0x36, 0x36, 0x36); // TODO : factoriser cette couleur (couleur de la route). addGPUTriangle(cih, 0xF1, 0xE0, 0xE0); // TODO : factoriser cette couleur (couleur des toits). for (int i = 0; i < 3; i++) @@ -193,8 +193,8 @@ void QuartierTri_::batiments() { Triangle tbatiments = tinterieur.offsetNormal(hauteurTrottoir); for (int i = 0; i < 3; i++) { - addChild(new RouteQuadChaussee(Quad(c[LEFT+i],c[TOP+i],ttrottoir[TOP+i],ttrottoir[LEFT+i]))); - addChild(new TrottoirQuadNormal(Quad(ttrottoir[LEFT+i],ttrottoir[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i]),hauteurTrottoir)); + addChild(new RouteQuad(Quad(c[LEFT+i],c[TOP+i],ttrottoir[TOP+i],ttrottoir[LEFT+i]))); + addChild(new TrottoirQuad(Quad(ttrottoir[LEFT+i],ttrottoir[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i]),hauteurTrottoir)); } // TODO : @@ -204,10 +204,10 @@ void QuartierTri_::batiments() { bool anglesAcceptable = tbatiments.minAngle() > Angle::d2r(30) && tbatiments.maxAngle() < Angle::d2r(120); if (!big && proba(seed, 0, 1, 20)) { - addChild(new TerrainTriHerbe(tbatiments)); + addChild(new TerrainTri(tbatiments)); } else if (small && anglesAcceptable) { addChild(new BatimentTri(tbatiments)); } else { - addChild(new TerrainTriHerbe(tbatiments)); + addChild(new TerrainTri(tbatiments)); } } diff --git a/rules/architecture/routetrottoir.cpp b/rules/architecture/routetrottoir.cpp new file mode 100644 index 0000000..1e6c6ce --- /dev/null +++ b/rules/architecture/routetrottoir.cpp @@ -0,0 +1,34 @@ +#include "all_includes.hh" + +TrottoirQuad::TrottoirQuad(Quad _c, float _height) : Chose(), c(_c), height(_height) { + addEntropy(c); + addEntropy(height); +} + +void TrottoirQuad::getBoundingBoxPoints() { + addBBPoints(c, height); +} + +void TrottoirQuad::triangulation() { + Quad ch = c.offsetNormal(height); + Quad bordureh = ch.inset(E,15); + + addGPUQuad(c[NE], c[SE], ch[SE], ch[NE], 0xAA, 0xAA, 0xAA); + addGPUQuad(ch[NE], ch[SE], bordureh[SE], bordureh[NE], 0xAA, 0xAA, 0xAA); + addGPUQuad(bordureh, 0x66, 0x66, 0x66); +} + +RouteQuad::RouteQuad(Quad _c) : Chose(), c(_c) { + addEntropy(c); +} + +void RouteQuad::getBoundingBoxPoints() { + // TODO : quelle hauteur mettre pour la route ? Il faut mettre 0 et ajuster le + // calcul des splitBox et mergeBox pour prendre en compre la somme des surfaces + // potentiellement visibles de l'objet. + addBBPoints(c, 1000); +} + +void RouteQuad::triangulation() { + addGPUQuad(c, 0x36, 0x36, 0x36); +} diff --git a/rules/architecture/routetrottoir.hh b/rules/architecture/routetrottoir.hh new file mode 100644 index 0000000..3e4ae0f --- /dev/null +++ b/rules/architecture/routetrottoir.hh @@ -0,0 +1,27 @@ +#ifndef _RULES_ARCHITECTURE_ROUTE_HH_ +#define _RULES_ARCHITECTURE_ROUTE_HH_ + +#include "all_includes.hh" + +class TrottoirQuad : public Chose { + private : + Quad c; + float height; + + public : + TrottoirQuad(Quad _c, float _height); + virtual void triangulation(); + virtual void getBoundingBoxPoints(); +}; + +class RouteQuad : public Chose { + private : + Quad c; + + public : + RouteQuad(Quad _c); + virtual void triangulation(); + virtual void getBoundingBoxPoints(); +}; + +#endif diff --git a/rules/architecture/terrain.cpp b/rules/architecture/terrain.cpp new file mode 100644 index 0000000..35a259c --- /dev/null +++ b/rules/architecture/terrain.cpp @@ -0,0 +1,31 @@ +#include "all_includes.hh" + +TerrainQuad::TerrainQuad(Quad _c) : Chose(), c(_c) { + addEntropy(c); +} + +void TerrainQuad::getBoundingBoxPoints() { + // TODO : quelle hauteur mettre pour le terrain plat ? Il faut mettre 0 et ajuster le + // calcul des splitBox et mergeBox pour prendre en compre la somme des surfaces + // potentiellement visibles de l'objet. + addBBPoints(c, 1000); +} + +void TerrainQuad::triangulation() { + addGPUQuad(c, 0x11, 0xaa, 0x22); +} + +TerrainTri::TerrainTri(Triangle _c) : Chose(), c(_c) { + addEntropy(c); +} + +void TerrainTri::getBoundingBoxPoints() { + // TODO : quelle hauteur mettre pour le terrain plat ? Il faut mettre 0 et ajuster le + // calcul des splitBox et mergeBox pour prendre en compre la somme des surfaces + // potentiellement visibles de l'objet. + addBBPoints(c, 1000); +} + +void TerrainTri::triangulation() { + addGPUTriangle(c, 0x11, 0xaa, 0x22); +} diff --git a/rules/architecture/terrain.hh b/rules/architecture/terrain.hh new file mode 100644 index 0000000..76e35c4 --- /dev/null +++ b/rules/architecture/terrain.hh @@ -0,0 +1,26 @@ +#ifndef _RULES_ARCHITECTURE_TERRAIN_HH_ +#define _RULES_ARCHITECTURE_TERRAIN_HH_ + +#include "all_includes.hh" + +class TerrainTri : public Chose { + private : + Triangle c; + + public : + TerrainTri(Triangle _c); + virtual void triangulation(); + virtual void getBoundingBoxPoints(); +}; + +class TerrainQuad : public Chose { + private : + Quad c; + + public : + TerrainQuad(Quad _c); + virtual void triangulation(); + virtual void getBoundingBoxPoints(); +}; + +#endif diff --git a/rules/route/routequadchaussee.cpp b/rules/route/routequadchaussee.cpp index 3fc5a08..e69de29 100644 --- a/rules/route/routequadchaussee.cpp +++ b/rules/route/routequadchaussee.cpp @@ -1,14 +0,0 @@ -#include "all_includes.hh" - -RouteQuadChaussee::RouteQuadChaussee(Quad _c) : Chose(), c(_c) { - addEntropy(c); -} - -void RouteQuadChaussee::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,1000)); // TODO -} - -void RouteQuadChaussee::triangulation() { - addGPUQuad(c, 0x36, 0x36, 0x36); -} diff --git a/rules/route/routequadchaussee.hh b/rules/route/routequadchaussee.hh index e3113bd..e69de29 100644 --- a/rules/route/routequadchaussee.hh +++ b/rules/route/routequadchaussee.hh @@ -1,16 +0,0 @@ -#ifndef _RULES_ROUTE_ROUTEQUADCHAUSSEE_HH_ -#define _RULES_ROUTE_ROUTEQUADCHAUSSEE_HH_ - -#include "all_includes.hh" - -class RouteQuadChaussee : public Chose { - private : - Quad c; - - public : - RouteQuadChaussee(Quad _c); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); -}; - -#endif diff --git a/rules/route/routetrottoirquad.cpp b/rules/route/routetrottoirquad.cpp deleted file mode 100644 index 79d2e85..0000000 --- a/rules/route/routetrottoirquad.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include "all_includes.hh" - -RouteTrottoirQuad::RouteTrottoirQuad(Quad _c) : Chose(), c(_c) { - addEntropy(c); -} - -bool RouteTrottoirQuad::split() { - float th = 20; // Terrain height. - Quad qtrottoir = c.insetNESW(250); - Quad qinterieur = qtrottoir.insetNESW(140); - - for (int i = 0; i < 4; i++) { - addChild(new RouteQuadChaussee(Quad(c[NE+i],c[SE+i],qtrottoir[SE+i],qtrottoir[NE+i]))); - addChild(new TrottoirQuadNormal(Quad(qtrottoir[NE+i],qtrottoir[SE+i],qinterieur[SE+i],qinterieur[NE+i]),th)); - } - - addChild(factory(seed, 0, qinterieur + Vertex(0,0,th))); - - return true; -} - -Chose* RouteTrottoirQuad::factory(int seed, int n, Quad c) { - bool small = c.minLength() < 2500; - bool big = c.maxLength() >= 5000; - bool anglesAcceptable = c.minAngle() > Angle::d2r(90-60) && c.maxAngle() < Angle::d2r(90+60); - //bool anglesOk = c.minAngle() > Angle::d2r(90-40) && c.maxAngle() < Angle::d2r(90+40); - //bool tooWideX = c.minLengthEW() * 2 < c.maxLengthNS(); // trop allongé (côté E ou W deux fois plus petit que le côté N ou S). - //bool tooWideY = c.minLengthNS() * 2 < c.maxLengthEW(); // trop allongé (côté N ou S deux fois plus petit que le côté E ou W). - - if (!big && proba(seed, n, 1, 20)) { - return new TerrainQuadHerbe(c); - } else if (small && anglesAcceptable) { - return new BatimentQuad(c); - } else { - return new TerrainQuadHerbe(c); - } -} - -void RouteTrottoirQuad::triangulation() { - float h = floatInRange(seed,1,minHeight,maxHeight); - float htoit = floatInRange(seed,2,minHeight/2,maxHeight/2); - - addGPUOcto(c, c + Vertex(0,0,h + htoit), 0xFF, 0xFF, 0xFF); -} - -void RouteTrottoirQuad::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,maxHeight + maxHeight/2)); // TODO -} diff --git a/rules/route/routetrottoirquad.hh b/rules/route/routetrottoirquad.hh deleted file mode 100644 index 99c938c..0000000 --- a/rules/route/routetrottoirquad.hh +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _RULES_ROUTE_ROUTETROTTOIRQUAD_HH_ -#define _RULES_ROUTE_ROUTETROTTOIRQUAD_HH_ - -#include "all_includes.hh" - - -class RouteTrottoirQuad : public Chose { -private : - Quad c; -public : - static const int minHeight = 400; - static const int maxHeight = 800; -public : - RouteTrottoirQuad(Quad _c); - virtual bool split(); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); - static Chose* factory(int seed, int n, Quad c); // TODO : est-ce une factory ou non, où la met-on… -}; - -#endif diff --git a/rules/route/routetrottoirtri.cpp b/rules/route/routetrottoirtri.cpp deleted file mode 100644 index 2896391..0000000 --- a/rules/route/routetrottoirtri.cpp +++ /dev/null @@ -1,53 +0,0 @@ -#include "all_includes.hh" - -RouteTrottoirTri::RouteTrottoirTri(Triangle _c) : Chose(), c(_c) { - addEntropy(c); -} - -bool RouteTrottoirTri::split() { - float th = 20; // Terrain height. - Triangle ttrottoir = c.insetLTR(250); - Triangle tinterieur = ttrottoir.insetLTR(140); - - for (int i = 0; i < 3; i++) { - addChild(new RouteQuadChaussee(Quad(c[LEFT+i],c[TOP+i],ttrottoir[TOP+i],ttrottoir[LEFT+i]))); - addChild(new TrottoirQuadNormal(Quad(ttrottoir[LEFT+i],ttrottoir[TOP+i],tinterieur[TOP+i],tinterieur[LEFT+i]),th)); - } - - addChild(factory(seed, 0, tinterieur + Vertex(0,0,th))); - - return true; -} - -Chose* RouteTrottoirTri::factory(int seed, int n, Triangle c) { - bool small = c.minLength() < 2500; - bool big = c.maxLength() >= 5000; - //bool anglesAcceptable = c.minAngle() > Angle::d2r(90-60) && c.maxAngle() < Angle::d2r(90+60); - //bool anglesOk = c.minAngle() > Angle::d2r(90-40) && c.maxAngle() < Angle::d2r(90+40); - //bool tooWideX = c.minLengthEW() * 2 < c.maxLengthNS(); // trop allongé (côté E ou W deux fois plus petit que le côté N ou S). - //bool tooWideY = c.minLengthNS() * 2 < c.maxLengthEW(); // trop allongé (côté N ou S deux fois plus petit que le côté E ou W). - - if (!big && proba(seed, n, 1, 20)) { - return new TerrainTriHerbe(c); - } else if (small && !big) { - return new BatimentTri(c); - } else { - return new TerrainTriHerbe(c); - } -} - -void RouteTrottoirTri::triangulation() { - float h = floatInRange(seed,1,minHeight,maxHeight); - float htoit = floatInRange(seed,2,minHeight/2,maxHeight/2); - - Triangle ch = c + Vertex(0,0,h + htoit); - addGPUTriangle(c, 0xFF, 0xFF, 0x00); - addGPUTriangle(ch, 0xFF, 0xFF, 0x00); - for (int i = 0; i < 3; i++) - addGPUQuad(c[LEFT+i], c[TOP+i], ch[TOP+i], ch[LEFT+i], 0xFF, 0xFF, 0x00); -} - -void RouteTrottoirTri::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,maxHeight + maxHeight/2)); // TODO -} diff --git a/rules/route/routetrottoirtri.hh b/rules/route/routetrottoirtri.hh deleted file mode 100644 index 941c072..0000000 --- a/rules/route/routetrottoirtri.hh +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _RULES_ROUTE_ROUTETROTTOIRTRI_HH_ -#define _RULES_ROUTE_ROUTETROTTOIRTRI_HH_ - -#include "all_includes.hh" - - -class RouteTrottoirTri : public Chose { -private : - Triangle c; -public : - static const int minHeight = 400; - static const int maxHeight = 800; -public : - RouteTrottoirTri(Triangle _c); - virtual bool split(); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); - static Chose* factory(int seed, int n, Triangle c); // TODO : est-ce une factory ou non, où la met-on… -}; - -#endif diff --git a/rules/route/trottoirquadnormal.cpp b/rules/route/trottoirquadnormal.cpp index d952053..e69de29 100644 --- a/rules/route/trottoirquadnormal.cpp +++ b/rules/route/trottoirquadnormal.cpp @@ -1,18 +0,0 @@ -#include "all_includes.hh" - -TrottoirQuadNormal::TrottoirQuadNormal(Quad _c, float _height) : Chose(), c(_c), height(_height) { -} - -void TrottoirQuadNormal::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,height)); -} - -void TrottoirQuadNormal::triangulation() { - Quad ch = c + Vertex(0,0,height); - Quad bordureh = ch.inset(E,15); - - addGPUQuad(c[NE], c[SE], ch[SE], ch[NE], 0xAA, 0xAA, 0xAA); - addGPUQuad(ch[NE], ch[SE], bordureh[SE], bordureh[NE], 0xAA, 0xAA, 0xAA); - addGPUQuad(bordureh, 0x66, 0x66, 0x66); -} diff --git a/rules/route/trottoirquadnormal.hh b/rules/route/trottoirquadnormal.hh index 98100b6..e69de29 100644 --- a/rules/route/trottoirquadnormal.hh +++ b/rules/route/trottoirquadnormal.hh @@ -1,17 +0,0 @@ -#ifndef _RULES_ROUTE_TROTTOIRQUADNORMAL_HH_ -#define _RULES_ROUTE_TROTTOIRQUADNORMAL_HH_ - -#include "all_includes.hh" - -class TrottoirQuadNormal : public Chose { - private : - Quad c; - float height; - - public : - TrottoirQuadNormal(Quad _c, float _height); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); -}; - -#endif diff --git a/rules/terrain/terrainquadherbe.cpp b/rules/terrain/terrainquadherbe.cpp deleted file mode 100644 index 7484836..0000000 --- a/rules/terrain/terrainquadherbe.cpp +++ /dev/null @@ -1,15 +0,0 @@ -#include "all_includes.hh" - -TerrainQuadHerbe::TerrainQuadHerbe(Quad _c) : Chose(), c(_c) { - addEntropy(c); -} - -void TerrainQuadHerbe::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,1000)); // TODO -} - -void TerrainQuadHerbe::triangulation() { - triangles.reserve(2); - addGPUQuad(c, 0x11, 0xaa, 0x22); -} diff --git a/rules/terrain/terrainquadherbe.hh b/rules/terrain/terrainquadherbe.hh deleted file mode 100644 index b492be4..0000000 --- a/rules/terrain/terrainquadherbe.hh +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _RULES_TERRAIN_TERRAINQUADHERBE_HH_ -#define _RULES_TERRAIN_TERRAINQUADHERBE_HH_ - -#include "all_includes.hh" - - -class TerrainQuadHerbe : public Chose { - private : - Quad c; - - public : - TerrainQuadHerbe(Quad _c); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); -}; - - -#endif diff --git a/rules/terrain/terraintriherbe.cpp b/rules/terrain/terraintriherbe.cpp deleted file mode 100644 index 3db41ba..0000000 --- a/rules/terrain/terraintriherbe.cpp +++ /dev/null @@ -1,14 +0,0 @@ -#include "all_includes.hh" - -TerrainTriHerbe::TerrainTriHerbe(Triangle _c) : Chose(), c(_c) { - addEntropy(c); -} - -void TerrainTriHerbe::getBoundingBoxPoints() { - addBBPoints(c); - addBBPoints(c + Vertex(0,0,1000)); // TODO -} - -void TerrainTriHerbe::triangulation() { - addGPUTriangle(c, 0x11, 0xaa, 0x22); -} diff --git a/rules/terrain/terraintriherbe.hh b/rules/terrain/terraintriherbe.hh deleted file mode 100644 index 884972f..0000000 --- a/rules/terrain/terraintriherbe.hh +++ /dev/null @@ -1,18 +0,0 @@ -#ifndef _RULES_TERRAIN_TERRAINTRIHERBE_HH_ -#define _RULES_TERRAIN_TERRAINTRIHERBE_HH_ - -#include "all_includes.hh" - - -class TerrainTriHerbe : public Chose { - private : - Triangle c; - - public : - TerrainTriHerbe(Triangle _c); - virtual void triangulation(); - virtual void getBoundingBoxPoints(); -}; - - -#endif