commit c87e38b4bb5d8de6626c28aa837d6d52b25e6683 parent e5505e08c8e9ba368c28f66a0ddbf097d8b81bce Author: Georges Dupéron <jahvascriptmaniac+github@free.fr> Date: Fri, 13 Jan 2012 16:01:03 +0100 Corrections. Diffstat:
24 files changed, 167 insertions(+), 149 deletions(-)
diff --git a/all_includes.hh b/all_includes.hh @@ -33,12 +33,14 @@ class Chose; #include "view.hh" #include "rules/chose.hh" +#include "rules/architecture/couleurs.hh" #include "rules/architecture/arche.hh" -#include "rules/architecture/toit.hh" +#include "rules/architecture/batiment.hh" #include "rules/architecture/quartier.hh" -#include "rules/architecture/terrain.hh" #include "rules/architecture/routetrottoir.hh" +#include "rules/architecture/terrain.hh" +#include "rules/architecture/toit.hh" #include "rules/batiment/batimentquad.hh" #include "rules/batiment/batimentquadmaison.hh" diff --git a/main.cpp b/main.cpp @@ -10,7 +10,7 @@ int main() { Vertex se(size, 0, 0); Vertex sw(0, 0, 0); Vertex nw(0, size, 0); - Chose* c = new QuartierQuad_(Quad(ne, se, sw, nw)); + Chose* c = new QuartierQuad(Quad(ne, se, sw, nw)); c->triangulation(); c->updateAABB(); diff --git a/rules/architecture/arche.cpp b/rules/architecture/arche.cpp @@ -17,7 +17,7 @@ bool ArcheQuad::split() { void ArcheQuad::triangulation() { Quad che = c.offsetNormal(f(end) * height); Quad chw = c.offsetNormal(f(start) * height); - addGPUOcto(c, Quad(che[NE], che[SE], chw[SW], chw[NW]), r, g, b); + addGPUOcto(c, Quad(che[NE], che[SE], chw[SW], chw[NW]), Couleurs::mur); } void ArcheQuad::getBoundingBoxPoints() { diff --git a/rules/architecture/arche.hh b/rules/architecture/arche.hh @@ -17,11 +17,6 @@ public: float f(float x); float ogive(float x); float berceau(float x); -private: - // TODO : couleur de l'arche - static const char r = 0xF1; // TODO : factoriser cette couleur (couleur des murs des faux bâtiments). - static const char g = 0xE3; - static const char b = 0xAD; }; #endif diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp diff --git a/rules/architecture/batiment.hh b/rules/architecture/batiment.hh @@ -0,0 +1,4 @@ +#include "all_includes.hh" + +//class Batiment_ : public Chose { +//}; diff --git a/rules/architecture/couleurs.hh b/rules/architecture/couleurs.hh @@ -0,0 +1,16 @@ +#ifndef _RULES_ARCHITECTURE_COLORS_HH_ +#define _RULES_ARCHITECTURE_COLORS_HH_ + +#include "all_includes.hh" + +class Couleurs { +public: + static const unsigned int mur = 0xF1E3AD; + static const unsigned int toit = 0xE02000; + static const unsigned int route = 0x363636; + static const unsigned int trottoir = 0x666666; + static const unsigned int bordureTrottoir = 0xAAAAAA; + static const unsigned int herbe = 0x11AA22; +}; + +#endif diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp @@ -1,22 +1,24 @@ #include "all_includes.hh" -QuartierQuad_::QuartierQuad_(Quad _c) : Chose(), c(_c) { +QuartierQuad::QuartierQuad(Quad _c) : Chose(), c(_c) { addEntropy(c); } -void QuartierQuad_::getBoundingBoxPoints() { +void QuartierQuad::getBoundingBoxPoints() { addBBPoints(c, 600); // TODO : factoriser cette longueur (hauteur max des bâtiments). } -bool QuartierQuad_::split() { +bool QuartierQuad::split() { bool small = c.minLength() < 3500; bool isConcave = c.isConcave(); - //bool isConcave = c.maxAngle() > Angle::d2r(160); + bool nearConcave = c.maxAngle() > Angle::d2r(160); 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 (isConcave) concave(); + else if (nearConcave) + angleAngle(); else if (!small && !anglesOk && proba(seed, -2, 1, 2)) angleAngle(); else if (!small && !anglesOk) @@ -30,55 +32,59 @@ bool QuartierQuad_::split() { return true; } -void QuartierQuad_::triangulation() { - Quad ci = c.insetNESW(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). - Quad cih = ci.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++) - addGPUQuad(Quad(ci[NE+i], ci[SE+i], cih[SE+i], cih[NE+i]), 0xF1, 0xE3, 0xAD); // TODO : factoriser cette couleur (couleur des murs des faux bâtiments). +void QuartierQuad::triangulation() { + if (c.isConcave()) { + // TODO + Quad q = c << c.concaveCorner(); + addGPUTriangle(Triangle(q[NE], q[SE], q[SW]), Couleurs::route); + addGPUTriangle(Triangle(q[SW], q[NW], q[NE]), Couleurs::route); + } else { + Quad ci = c.insetNESW(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). + Quad cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). + addGPUQuad(c, Couleurs::route); + addGPUQuad(cih, Couleurs::toit); + for (int i = 0; i < 4; i++) + addGPUQuad(Quad(ci[NE+i], ci[SE+i], cih[SE+i], cih[NE+i]), Couleurs::mur); + } } -void QuartierQuad_::concave() { - // TODO À vérifier. - Triangle t1(c[c.concaveCorner()], c[c.concaveCorner()+1], c[c.concaveCorner()+2]); - Triangle t2(c[c.concaveCorner()+2], c[c.concaveCorner()+3], c[c.concaveCorner()]); - - addChild(new QuartierTri_(t1)); - addChild(new QuartierTri_(t2)); +void QuartierQuad::concave() { + Quad q = c << c.concaveCorner(); + addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW]))); + addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE]))); } -void QuartierQuad_::angleCote() { +void QuartierQuad::angleCote() { Quad q = c << c.maxAngleCorner(); Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 0.4f, 0.6f); Vertex w = Segment(q[SW], q[NW]).randomPos(seed, 0, 0.4f, 0.6f); Triangle ts(q[SE], s, q[NE]); Triangle tw(q[NE], w, q[NW]); if (ts.minAngle() > tw.minAngle()) { - addChild(new QuartierTri_(ts)); - addChild(new QuartierQuad_(Quad(q[NE], s, q[SW], q[NW]))); + addChild(new QuartierTri(ts)); + addChild(new QuartierQuad(Quad(q[NE], s, q[SW], q[NW]))); } else { - addChild(new QuartierTri_(tw)); - addChild(new QuartierQuad_(Quad(q[NE], q[SE], q[SW], w))); + addChild(new QuartierTri(tw)); + addChild(new QuartierQuad(Quad(q[NE], q[SE], q[SW], w))); } } -void QuartierQuad_::angleAngle() { +void QuartierQuad::angleAngle() { Quad q = c << c.maxAngleCorner(); - addChild(new QuartierTri_(Triangle(q[NE], q[SE], q[SW]))); - addChild(new QuartierTri_(Triangle(q[SW], q[NW], q[NE]))); + addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW]))); + addChild(new QuartierTri(Triangle(q[SW], q[NW], q[NE]))); } -void QuartierQuad_::rect() { +void QuartierQuad::rect() { Quad q = c << c.maxLengthSide(); Vertex n = Segment(q[NW], q[NE]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); Vertex s = Segment(q[SE], q[SW]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); - addChild(new QuartierQuad_(Quad(q[NE], q[SE], s, n))); - addChild(new QuartierQuad_(Quad(q[SW], q[NW], n, s))); + addChild(new QuartierQuad(Quad(q[NE], q[SE], s, n))); + addChild(new QuartierQuad(Quad(q[SW], q[NW], n, s))); } -void QuartierQuad_::carre() { +void QuartierQuad::carre() { // TODO : insetProportionnal(); Vertex center = c.insetNESW(c.minLength() / 4.f).randomPoint(seed, 0); Vertex middle[4]; @@ -86,10 +92,10 @@ void QuartierQuad_::carre() { middle[N+i] = Segment(c[NW+i], c[NE+i]).randomPos(seed, i + 1, 0.25, 0.75); for (int i = 0; i < 4; i++) - addChild(new QuartierQuad_(Quad(c[NE+i], middle[E+i], center, middle[N+i]))); + addChild(new QuartierQuad(Quad(c[NE+i], middle[E+i], center, middle[N+i]))); } -void QuartierQuad_::batiments() { +void QuartierQuad::batiments() { float hauteurTrottoir = 20; // TODO : factoriser + ajouter ça à la hauteur max d'un bâtiment dans les autres calculs. Quad qtrottoir = c.insetNESW(250); Quad qinterieur = qtrottoir.insetNESW(140); @@ -111,15 +117,15 @@ void QuartierQuad_::batiments() { } } -QuartierTri_::QuartierTri_(Triangle _c) : Chose(), c(_c) { +QuartierTri::QuartierTri(Triangle _c) : Chose(), c(_c) { addEntropy(c); } -void QuartierTri_::getBoundingBoxPoints() { +void QuartierTri::getBoundingBoxPoints() { addBBPoints(c, 600); // TODO : factoriser cette longueur (hauteur max des bâtiments). } -bool QuartierTri_::split() { +bool QuartierTri::split() { bool small = c.minLength() < 5000; bool big = c.maxLength() >= 10000; float minAngle = c.minAngle(); @@ -149,16 +155,16 @@ bool QuartierTri_::split() { return true; } -void QuartierTri_::triangulation() { +void QuartierTri::triangulation() { Triangle ci = c.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). - 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). + Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). + addGPUTriangle(c, Couleurs::route); + addGPUTriangle(cih, Couleurs::toit); for (int i = 0; i < 3; i++) - addGPUQuad(Quad(ci[LEFT+i], ci[TOP+i], cih[TOP+i], cih[LEFT+i]), 0xF1, 0xE3, 0xAD); // TODO : factoriser cette couleur (couleur des murs des faux bâtiments). + addGPUQuad(Quad(ci[LEFT+i], ci[TOP+i], cih[TOP+i], cih[LEFT+i]), Couleurs::mur); } -void QuartierTri_::centre() { +void QuartierTri::centre() { // TODO : maxLength / 6 au lieu de 1000 // TODO : insetProportionnal(); Vertex center = c.insetLTR(c.maxLength() / 6).randomPoint(seed, 0); @@ -167,27 +173,28 @@ void QuartierTri_::centre() { edge[LEFTSIDE+i] = Segment(c[LEFT+i], c[TOP+i]).randomPos(seed, i+1, 1.f/3.f, 2.f/3.f); for (int i = 0; i < 3; i++) - addChild(new QuartierQuad_(Quad(c[TOP+i], edge[RIGHTSIDE+i], center, edge[LEFTSIDE+i]))); + addChild(new QuartierQuad(Quad(c[TOP+i], edge[RIGHTSIDE+i], center, edge[LEFTSIDE+i]))); } -void QuartierTri_::hauteur() { +void QuartierTri::hauteur() { Triangle t = c << c.maxAngleCorner(); Vertex opposite = Segment(t[TOP], t[RIGHT]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); - addChild(new QuartierTri_(Triangle(t[TOP], opposite, t[LEFT]))); - addChild(new QuartierTri_(Triangle(t[LEFT], opposite, t[RIGHT]))); + addChild(new QuartierTri(Triangle(t[TOP], opposite, t[LEFT]))); + addChild(new QuartierTri(Triangle(t[LEFT], opposite, t[RIGHT]))); } -void QuartierTri_::trapeze() { +void QuartierTri::trapeze() { Triangle t = c << c.minAngleCorner(); Vertex left = Segment(t[LEFT], t[TOP]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); Vertex base = Segment(t[RIGHT], t[LEFT]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); - addChild(new QuartierTri_(Triangle(base, t[TOP], left))); - addChild(new QuartierQuad_(Quad(left, t[TOP], t[RIGHT], base))); + addChild(new QuartierTri(Triangle(base, t[LEFT], left))); + addChild(new QuartierQuad(Quad(base, left, t[TOP], t[RIGHT]))); } -void QuartierTri_::batiments() { +void QuartierTri::batiments() { + return; float hauteurTrottoir = 20; // TODO : factoriser + ajouter ça à la hauteur max d'un bâtiment dans les autres calculs. Triangle ttrottoir = c.insetLTR(250); Triangle tinterieur = ttrottoir.insetLTR(140); diff --git a/rules/architecture/quartier.hh b/rules/architecture/quartier.hh @@ -3,11 +3,11 @@ #include "all_includes.hh" -class QuartierQuad_: public Chose { +class QuartierQuad: public Chose { private: Quad c; public: - QuartierQuad_(Quad _c); + QuartierQuad(Quad _c); virtual void getBoundingBoxPoints(); virtual bool split(); virtual void triangulation(); @@ -20,11 +20,11 @@ private: void batiments(); }; -class QuartierTri_: public Chose { +class QuartierTri: public Chose { private: Triangle c; public: - QuartierTri_(Triangle _c); + QuartierTri(Triangle _c); virtual void getBoundingBoxPoints(); virtual bool split(); virtual void triangulation(); diff --git a/rules/architecture/routetrottoir.cpp b/rules/architecture/routetrottoir.cpp @@ -13,9 +13,9 @@ 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); + addGPUQuad(c[NE], c[SE], ch[SE], ch[NE], Couleurs::bordureTrottoir); + addGPUQuad(ch[NE], ch[SE], bordureh[SE], bordureh[NE], Couleurs::bordureTrottoir); + addGPUQuad(bordureh, Couleurs::trottoir); } RouteQuad::RouteQuad(Quad _c) : Chose(), c(_c) { @@ -30,5 +30,5 @@ void RouteQuad::getBoundingBoxPoints() { } void RouteQuad::triangulation() { - addGPUQuad(c, 0x36, 0x36, 0x36); + addGPUQuad(c, Couleurs::route); } diff --git a/rules/architecture/terrain.cpp b/rules/architecture/terrain.cpp @@ -12,7 +12,7 @@ void TerrainQuad::getBoundingBoxPoints() { } void TerrainQuad::triangulation() { - addGPUQuad(c, 0x11, 0xaa, 0x22); + addGPUQuad(c, Couleurs::herbe); } TerrainTri::TerrainTri(Triangle _c) : Chose(), c(_c) { @@ -27,5 +27,5 @@ void TerrainTri::getBoundingBoxPoints() { } void TerrainTri::triangulation() { - addGPUTriangle(c, 0x11, 0xaa, 0x22); + addGPUTriangle(c, Couleurs::herbe); } diff --git a/rules/architecture/toit.cpp b/rules/architecture/toit.cpp @@ -25,7 +25,7 @@ void ToitQuad::pointCentral() { Quad qh = c.offsetNormal(height); Vertex center = qh.insetNESW(qh.minLength() / 3.f).randomPoint(seed, 0); for (int i = 0; i < 4; i++) - addGPUTriangle(c[NE+i], center, c[SE+i], r, g, b); + addGPUTriangle(c[NE+i], center, c[SE+i], Couleurs::toit); } void ToitQuad::deuxPoints() { @@ -36,10 +36,10 @@ void ToitQuad::deuxPoints() { Vertex e = Segment(qh[NE], qh[SE]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); Vertex centerE = Segment(e,w).randomPos(seed, 2, 0.6f, 0.8f); Vertex centerW = Segment(e,w).randomPos(seed, 2, 0.2f, 0.4f); - addGPUTriangle(q[NE], centerE, q[SE], r, g, b); - addGPUTriangle(q[SW], centerW, q[NW], r, g, b); - addGPUQuad(q[SE], q[SW], centerW, centerE, r, g, b); - addGPUQuad(q[NW], q[NE], centerE, centerW, r, g, b); + addGPUTriangle(q[NE], centerE, q[SE], Couleurs::toit); + addGPUTriangle(q[SW], centerW, q[NW], Couleurs::toit); + addGPUQuad(q[SE], q[SW], centerW, centerE, Couleurs::toit); + addGPUQuad(q[NW], q[NE], centerE, centerW, Couleurs::toit); } void ToitQuad::deuxPointsVerticaux() { @@ -48,14 +48,14 @@ void ToitQuad::deuxPointsVerticaux() { Quad qh = q.offsetNormal(height); Vertex w = Segment(qh[NW], qh[SW]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); Vertex e = Segment(qh[NE], qh[SE]).randomPos(seed, 1, 1.f/3.f, 2.f/3.f); - addGPUTriangle(q[NE], e, q[SE], r, g, b); // TODO : devrait être couleur mur. - addGPUTriangle(q[SW], w, q[NW], r, g, b); // TODO : devrait être couleur mur. - addGPUQuad(q[SE], q[SW], w, e, r, g, b); - addGPUQuad(q[NW], q[NE], e, w, r, g, b); + addGPUTriangle(q[NE], e, q[SE], Couleurs::toit); // TODO : devrait être couleur mur. + addGPUTriangle(q[SW], w, q[NW], Couleurs::toit); // TODO : devrait être couleur mur. + addGPUQuad(q[SE], q[SW], w, e, Couleurs::toit); + addGPUQuad(q[NW], q[NE], e, w, Couleurs::toit); } void ToitQuad::plat() { - addGPUQuad(c, r, g, b); + addGPUQuad(c, Couleurs::toit); } ToitTri::ToitTri(Triangle _c, float _height) : Chose(), c(_c), height(_height) { @@ -82,35 +82,35 @@ void ToitTri::pointCentral() { Triangle th = c.offsetNormal(height); Vertex center = th.insetLTR(th.minLength() / 3.f).randomPoint(seed, 0); for (int i = 0; i < 3; i++) - addGPUTriangle(c[LEFT+i], center, c[TOP+i], r, g, b); + addGPUTriangle(c[LEFT+i], center, c[TOP+i], Couleurs::toit); } void ToitTri::troisPoints() { Triangle th = c.offsetNormal(height).insetLTR(c.minLength() / 3.f); - addGPUTriangle(th, r, g, b); + addGPUTriangle(th, Couleurs::toit); for (int i = 0; i < 3; i++) - addGPUQuad(c[LEFT], c[TOP], th[TOP], th[LEFT], r, g, b); + addGPUQuad(c[LEFT], c[TOP], th[TOP], th[LEFT], Couleurs::toit); } void ToitTri::unPointVertical() { // Rotation aléatoire du triangle Triangle t = c >> (hash2(seed, 0) % 3); Triangle th = t.offsetNormal(height); - addGPUTriangle(t[LEFT], th[TOP], t[RIGHT], r, g, b); - addGPUTriangle(t[TOP], th[TOP], t[LEFT], r, g, b); - addGPUTriangle(t[RIGHT], th[TOP], t[TOP], r, g, b); + addGPUTriangle(t[LEFT], th[TOP], t[RIGHT], Couleurs::toit); + addGPUTriangle(t[TOP], th[TOP], t[LEFT], Couleurs::toit); + addGPUTriangle(t[RIGHT], th[TOP], t[TOP], Couleurs::toit); } void ToitTri::deuxPointsVerticaux() { // Rotation aléatoire du triangle Triangle t = c >> (hash2(seed, 0) % 3); Triangle th = t.offsetNormal(height); - addGPUTriangle(th[LEFT], t[TOP], th[RIGHT], r, g, b); - addGPUTriangle(t[TOP], th[LEFT], t[LEFT], r, g, b); - addGPUTriangle(t[RIGHT], th[RIGHT], t[TOP], r, g, b); + addGPUTriangle(th[LEFT], t[TOP], th[RIGHT], Couleurs::toit); + addGPUTriangle(t[TOP], th[LEFT], t[LEFT], Couleurs::toit); + addGPUTriangle(t[RIGHT], th[RIGHT], t[TOP], Couleurs::toit); } void ToitTri::plat() { - addGPUTriangle(c, r, g, b); + addGPUTriangle(c, Couleurs::toit); } diff --git a/rules/architecture/toit.hh b/rules/architecture/toit.hh @@ -35,9 +35,6 @@ private: void unPointVertical(); void deuxPointsVerticaux(); void plat(); - static const char r = 0xF1; - static const char g = 0xE0; - static const char b = 0xE0; }; #endif diff --git a/rules/batiment/batimentquad.cpp b/rules/batiment/batimentquad.cpp @@ -26,5 +26,5 @@ void BatimentQuad::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); + addGPUOcto(c, c + Vertex(0,0,h + htoit), 0xFFFFFF); } diff --git a/rules/batiment/batimentquadblock.cpp b/rules/batiment/batimentquadblock.cpp @@ -36,5 +36,5 @@ bool BatimentQuadBlock::split() { } void BatimentQuadBlock::triangulation() { - addGPUOcto(c,ch, 0xF1, 0xE0, 0xE0); + addGPUOcto(c,ch, 0xF1E0E0); } diff --git a/rules/batiment/batimentquadjardin.cpp b/rules/batiment/batimentquadjardin.cpp @@ -12,5 +12,5 @@ void BatimentQuadJardin::getBoundingBoxPoints() { void BatimentQuadJardin::triangulation() { triangles.reserve(2); - addGPUQuad(c, 0x12, 0x64, 0x12); + addGPUQuad(c, 0x126412); } diff --git a/rules/batiment/batimentquadmaison.cpp b/rules/batiment/batimentquadmaison.cpp @@ -28,9 +28,9 @@ void BatimentQuadMaison::triangulation() { Quad ch = c + Vertex(0,0,h); Vertex toit = (ch[NE] + ch[SE] + ch[SW] + ch[NW]) / 4 + Vertex(0,0,htoit); - addGPUOcto(c,ch,0xf1,0xe3,0xad); + addGPUOcto(c,ch,Couleurs::mur); for (int i = 0; i < 4; i++) { - addGPUTriangle(ch[SE+i],toit,ch[NE+i],0x96,0x16,0x18); + addGPUTriangle(ch[SE+i],toit,ch[NE+i],0x961618); } } diff --git a/rules/batiment/batimentquadmaisonpont.cpp b/rules/batiment/batimentquadmaisonpont.cpp @@ -35,15 +35,15 @@ void BatimentQuadMaisonPont::triangulation() { Quad q = c.makeParallelogram(); Quad qh = q + Vertex(0,0,h); - addGPUQuad(c,0x80,0x80,0x80); - addGPUOcto(q,qh,0xF1,0xE0,0xE0); + addGPUQuad(c,0x808080); + addGPUOcto(q,qh,Couleurs::mur); Vertex ce = qh[SE] + (qh[NE] - qh[SE])/2 + Vertex(0,0,0.5f * height / 3.f); Vertex cw = qh[SW] + (qh[NW] - qh[SW])/2 + Vertex(0,0,0.5f * height / 3.f); - addGPUTriangle(qh[NW],cw,qh[SW],0xF1,0xE0,0xE0); - addGPUTriangle(qh[SE],ce,qh[NE],0xF1,0xE0,0xE0); + addGPUTriangle(qh[NW],cw,qh[SW],Couleurs::mur); + addGPUTriangle(qh[SE],ce,qh[NE],Couleurs::mur); - addGPUQuad(qh[NE],qh[NW],cw,ce,0xE0,0x20,0x00); - addGPUQuad(qh[SW],qh[SE],ce,cw,0xE0,0x20,0x00); + addGPUQuad(qh[NE],qh[NW],cw,ce,Couleurs::toit); + addGPUQuad(qh[SW],qh[SE],ce,cw,Couleurs::toit); } diff --git a/rules/batiment/batimentquadmur.cpp b/rules/batiment/batimentquadmur.cpp @@ -43,7 +43,7 @@ bool BatimentQuadMur::split() { void BatimentQuadMur::triangulation() { if(!window) - addGPUOcto(c, ch, 0xf1,0xe3,0xad); + addGPUOcto(c, ch, Couleurs::mur); //else //addGPUOcto(c, ch, 0xFF,0x10,0x00); //addGPUQuad(windowPosh,0xFF,0xFF,0x00); diff --git a/rules/batiment/batimentquadpont.cpp b/rules/batiment/batimentquadpont.cpp @@ -36,35 +36,35 @@ void BatimentQuadPont::triangulation() { int middle = steps/2; int n; - addGPUTriangle(c[SW],pb,ch[SW],0xD0,0xD0,0xD0); - addGPUTriangle(pa,c[NW],ch[NW],0xD0,0xD0,0xD0); + addGPUTriangle(c[SW],pb,ch[SW],0xD0D0D0); + addGPUTriangle(pa,c[NW],ch[NW],0xD0D0D0); for(var=-1.7f, n=0; var <= 1.7f; var+=pas, n++) { q = q.inset(W,n2); a = q[NW] + Vertex(0,0,nt(var,height)); b = q[SW] + Vertex(0,0,nt(var,height)); - addGPUQuad(a,b,pb,pa,0xD0,0xD0,0xD0); + addGPUQuad(a,b,pb,pa,0xD0D0D0); if( n < middle) { - addGPUTriangle(pa,a,ch[NW],0xD0,0xD0,0xD0); - addGPUTriangle(b,pb,ch[SW],0xD0,0xD0,0xD0); + addGPUTriangle(pa,a,ch[NW],0xD0D0D0); + addGPUTriangle(b,pb,ch[SW],0xD0D0D0); } else if(n == middle) { - addGPUTriangle(pa,a,ch[NW],0xD0,0xD0,0xD0); - addGPUTriangle(b,pb,ch[SW],0xD0,0xD0,0xD0); - addGPUTriangle(a,ch[NE],ch[NW],0xD0,0xD0,0xD0); - addGPUTriangle(b,ch[SW],ch[SE],0xD0,0xD0,0xD0); + addGPUTriangle(pa,a,ch[NW],0xD0D0D0); + addGPUTriangle(b,pb,ch[SW],0xD0D0D0); + addGPUTriangle(a,ch[NE],ch[NW],0xD0D0D0); + addGPUTriangle(b,ch[SW],ch[SE],0xD0D0D0); } else { - addGPUTriangle(pa,a,ch[NE],0xD0,0xD0,0xD0); - addGPUTriangle(b,pb,ch[SE],0xD0,0xD0,0xD0); + addGPUTriangle(pa,a,ch[NE],0xD0D0D0); + addGPUTriangle(b,pb,ch[SE],0xD0D0D0); } pa = a; pb = b; } - addGPUTriangle(c[SE],pb,ch[SE],0xD0,0xD0,0xD0); - addGPUTriangle(c[NE],pa,ch[NE],0xD0,0xD0,0xD0); + addGPUTriangle(c[SE],pb,ch[SE],0xD0D0D0); + addGPUTriangle(c[NE],pa,ch[NE],0xD0D0D0); } diff --git a/rules/batiment/batimentquadtoit.cpp b/rules/batiment/batimentquadtoit.cpp @@ -18,11 +18,11 @@ void BatimentQuadToit::triangulation() { Vertex ce = c[SE] + (c[NE] - c[SE])/2 + Vertex(0,0,height); Vertex cw = c[SW] + (c[NW] - c[SW])/2 + Vertex(0,0,height); - addGPUTriangle(c[NW],cw,c[SW],0xF1,0xE0,0xE0); - addGPUTriangle(c[SE],ce,c[NE],0xF1,0xE0,0xE0); + addGPUTriangle(c[NW],cw,c[SW],0xF1E0E0); + addGPUTriangle(c[SE],ce,c[NE],0xF1E0E0); - addGPUQuad(c[NE],c[NW],c[SW],c[SE],0xF1,0xE0,0xE0); - addGPUQuad(c[NE],c[NW],cw,ce,0xE0,0x20,0x00); - addGPUQuad(c[SW],c[SE],ce,cw,0xE0,0x20,0x00); + //addGPUQuad(c[NE],c[NW],c[SW],c[SE],0xF1E0E0); + addGPUQuad(c[NE],c[NW],cw,ce,0xE02000); + addGPUQuad(c[SW],c[SE],ce,cw,0xE02000); } } diff --git a/rules/batiment/batimenttri.cpp b/rules/batiment/batimenttri.cpp @@ -43,8 +43,7 @@ void BatimentTri::triangulation() { // float htoit = hashInRange(seed,2,minHeight/2,maxHeight/2); Triangle ch = c + Vertex(0,0,h); - addGPUTriangle(c, 0xFF, 0xFF, 0x00); - addGPUTriangle(ch, 0xFF, 0xFF, 0x00); + addGPUTriangle(ch, Couleurs::toit); for (int i = 0; i < 3; i++) - addGPUQuad(c[LEFT+i], c[TOP+i], ch[TOP+i], ch[LEFT+i], 0xFF, 0xFF, 0x00); + addGPUQuad(c[LEFT+i], c[TOP+i], ch[TOP+i], ch[LEFT+i], Couleurs::mur); } diff --git a/rules/chose.cpp b/rules/chose.cpp @@ -20,33 +20,33 @@ bool Chose::merge() { return true; } -void Chose::addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned char r, unsigned char g, unsigned char b) { - triangles.push_back(new GPUTriangle(left, top, right, r, g, b)); +void Chose::addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned int rgb) { + triangles.push_back(new GPUTriangle(left, top, right, (rgb >> 16) & 0xff, (rgb >> 8) & 0xff, rgb & 0xff)); } -void Chose::addGPUTriangle(Triangle t, unsigned char r, unsigned char g, unsigned char b) { - addGPUTriangle(t[LEFT], t[TOP], t[RIGHT], r, g, b); +void Chose::addGPUTriangle(Triangle t, unsigned int rgb) { + addGPUTriangle(t[LEFT], t[TOP], t[RIGHT], rgb); } -void Chose::addGPUQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, unsigned char r, unsigned char g, unsigned char b) { - this->addGPUTriangle(nw,ne,se,r,g,b); - this->addGPUTriangle(se,sw,nw,r,g,b); +void Chose::addGPUQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, unsigned int rgb) { + this->addGPUTriangle(nw, ne, se, rgb); + this->addGPUTriangle(se, sw, nw, rgb); } -void Chose::addGPUQuad(Quad q, unsigned char r, unsigned char g, unsigned char b) { - addGPUQuad(q[NE], q[SE], q[SW], q[NW], r, g, b); +void Chose::addGPUQuad(Quad q, unsigned int rgb) { + addGPUQuad(q[NE], q[SE], q[SW], q[NW], rgb); } void Chose::addGPUOcto(Vertex ne, Vertex se, Vertex sw, Vertex nw, - Vertex neh, Vertex seh, Vertex swh, Vertex nwh, unsigned char r, unsigned char g, unsigned char b) { - addGPUOcto(Quad(ne,se,sw,nw), Quad(neh,seh,swh,nwh), r, g, b); + Vertex neh, Vertex seh, Vertex swh, Vertex nwh, unsigned int rgb) { + addGPUOcto(Quad(ne,se,sw,nw), Quad(neh,seh,swh,nwh), rgb); } -void Chose::addGPUOcto(Quad q, Quad qh, unsigned char r, unsigned char g, unsigned char b) { - this->addGPUQuad(q[SE], q[NE], q[NW], q[SW], r, g, b); - this->addGPUQuad(qh[NE], qh[SE], qh[SW], qh[NW], r, g, b); +void Chose::addGPUOcto(Quad q, Quad qh, unsigned int rgb) { + this->addGPUQuad(q[SE], q[NE], q[NW], q[SW], rgb); + this->addGPUQuad(qh[NE], qh[SE], qh[SW], qh[NW], rgb); for (int i = 0; i < 4; i++) - this->addGPUQuad(q[NE+i], q[SE+i], qh[SE+i], qh[NE+i], r, g, b); + this->addGPUQuad(q[NE+i], q[SE+i], qh[SE+i], qh[NE+i], rgb); } void Chose::display() { @@ -152,10 +152,8 @@ void Chose::drawAABB() { Vertex(lod.splitBox[1], lod.splitBox[2], lod.splitBox[5]), Vertex(lod.splitBox[1], lod.splitBox[3], lod.splitBox[5]), Vertex(lod.splitBox[0], lod.splitBox[3], lod.splitBox[5]), - hash2(seed, 42) & 255, - hash2(seed, 43) & 255, - hash2(seed, 44) & 255 + hash2(seed, 42) & 0xffffff ); } -unsigned int Chose::initialSeed = random_seed(); +unsigned int Chose::initialSeed = 187001748;//random_seed(); diff --git a/rules/chose.hh b/rules/chose.hh @@ -62,14 +62,14 @@ class Chose { } void addChild(Chose* c); - void addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned char r, unsigned char g, unsigned char b); - void addGPUTriangle(Triangle t, unsigned char r, unsigned char g, unsigned char b); - void addGPUQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, unsigned char r, unsigned char g, unsigned char b); - void addGPUQuad(Quad q, unsigned char r, unsigned char g, unsigned char b); + void addGPUTriangle(Vertex left, Vertex top, Vertex right, unsigned int rgb); + void addGPUTriangle(Triangle t, unsigned int rgb); + void addGPUQuad(Vertex ne, Vertex se, Vertex sw, Vertex nw, unsigned int rgb); + void addGPUQuad(Quad q, unsigned int rgb); void addGPUOcto(Vertex ne, Vertex se, Vertex sw, Vertex nw, Vertex neh, Vertex seh, Vertex swh, Vertex nwh, - unsigned char r, unsigned char g, unsigned char b); - void addGPUOcto(Quad q, Quad qh, unsigned char r, unsigned char g, unsigned char b); + unsigned int rgb); + void addGPUOcto(Quad q, Quad qh, unsigned int rgb); }; #endif