commit bacf9446849125d4cb91e224bdcacdd9c5431526
parent d764489f305ba5d174ddd25a80272d26db0abe7f
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Thu, 19 Jan 2012 08:13:39 +0100
Ajout d'un modèle de toit.
Diffstat:
3 files changed, 15 insertions(+), 7 deletions(-)
diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp
@@ -6,7 +6,7 @@ BatimentQuad_::BatimentQuad_(Quad _c, bool _isSub, bool _we, bool _ws, bool _ww,
}
bool BatimentQuad_::split() {
- int minSurface = 100 * 100 * 10;
+ int minSurface = 100 * 100 * 100;
Quad q = c;
//Quad q = c << c.maxLengthSide();
if(c.maxLengthNS() < c.maxLengthEW()) {
diff --git a/rules/architecture/toit.cpp b/rules/architecture/toit.cpp
@@ -12,12 +12,12 @@ void ToitQuad::getBoundingBoxPoints() {
}
void ToitQuad::triangulation() {
- switch (hash2(seed, -1) % 4) {
+ switch (hash2(seed, -1) % 5) {
case 0: pointCentral(); break;
- // TODO : deuxPoints() et deuxPointsVerticaux() ne génèrent pas des quad où les 4 points sont sur le même plan.
- case 1: deuxPoints(); break;
- case 2: deuxPointsVerticaux(); break;
- case 3:
+ case 1: quatrePoints(); break;
+ case 2: deuxPoints(); break;
+ case 3: deuxPointsVerticaux(); break;
+ case 4:
default: plat(); break;
}
}
@@ -29,6 +29,13 @@ void ToitQuad::pointCentral() {
addGPUTriangle(c[SE+i], center, c[NE+i], Couleurs::toit);
}
+void ToitQuad::quatrePoints() {
+ Quad ch = c.offsetNormal(height).insetNESW(c.minLength() / 3.f); // TODO : insetProportional
+ addGPUQuad(ch, Couleurs::toit);
+ for (int i = 0; i < 4; i++)
+ addGPUQuad(ch[NE+i], c[NE+i], c[SE+i], ch[SE+i], Couleurs::toit);
+}
+
void ToitQuad::deuxPoints() {
// Orienter c dans le sens de la longueur d'est en ouest.
Quad q = c >> ((c.maxLengthNS() > c.maxLengthEW()) ? 1 : 0);
@@ -111,7 +118,7 @@ void ToitTri::troisPoints() {
Triangle th = c.offsetNormal(height).insetLTR(c.minLength() / 3.f);
addGPUTriangle(th, Couleurs::toit);
for (int i = 0; i < 3; i++)
- addGPUQuad(c[LEFT], c[TOP], th[TOP], th[LEFT], Couleurs::toit);
+ addGPUQuad(c[LEFT+i], c[TOP+i], th[TOP+i], th[LEFT+i], Couleurs::toit);
}
void ToitTri::unPointVertical() {
diff --git a/rules/architecture/toit.hh b/rules/architecture/toit.hh
@@ -13,6 +13,7 @@ public:
virtual void getBoundingBoxPoints();
private:
void pointCentral();
+ void quatrePoints();
void deuxPoints();
void deuxPointsVerticaux();
void plat();