commit 8d2ac728738df983cf55d9c607c4c40a7457a49b
parent c87e38b4bb5d8de6626c28aa837d6d52b25e6683
Author: Georges Dupéron <jahvascriptmaniac+github@free.fr>
Date: Fri, 13 Jan 2012 16:07:37 +0100
Triangulation correcte des quartiers concaves.
Diffstat:
3 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/rules/architecture/batiment.cpp b/rules/architecture/batiment.cpp
@@ -0,0 +1,2 @@
+#include "all_includes.hh"
+
diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp
@@ -34,10 +34,9 @@ bool QuartierQuad::split() {
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);
+ triangulationConcave(Triangle(q[NE], q[SE], q[SW]));
+ triangulationConcave(Triangle(q[SW], q[NW], q[NE]));
} 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).
@@ -48,6 +47,16 @@ void QuartierQuad::triangulation() {
}
}
+void QuartierQuad::triangulationConcave(Triangle t) {
+ // Même code que QuartierTri::triangulation.
+ Triangle ci = t.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir).
+ Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments).
+ addGPUTriangle(t, 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]), Couleurs::mur);
+}
+
void QuartierQuad::concave() {
Quad q = c << c.concaveCorner();
addChild(new QuartierTri(Triangle(q[NE], q[SE], q[SW])));
diff --git a/rules/architecture/quartier.hh b/rules/architecture/quartier.hh
@@ -12,6 +12,7 @@ public:
virtual bool split();
virtual void triangulation();
private:
+ void triangulationConcave(Triangle t);
void concave();
void angleAngle();
void angleCote();