From 9d668fe95e14e95f772ba95f5ac6755eaa921f04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Georges=20Dup=C3=A9ron?= Date: Fri, 20 Jan 2012 13:53:40 +0100 Subject: [PATCH] =?UTF-8?q?Corrections=20sur=20les=20toits=20&=20b=C3=A2ti?= =?UTF-8?q?ments.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- rules/batiment.cpp | 1 - rules/toit.cpp | 17 +++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/rules/batiment.cpp b/rules/batiment.cpp index 7f1435e..20141b0 100644 --- a/rules/batiment.cpp +++ b/rules/batiment.cpp @@ -145,7 +145,6 @@ void BatimentTri::sousBatiments() { Triangle t = c << c.minAngleCorner(); TriBool tb = w << c.minAngleCorner(); - // TODO : ajuster pour que la distance c[LEFT] -- left et c[LEFT] -- base soit similaire. Vertex left = Segment(t[LEFT], t[TOP]).randomPos(seed, 0, 1.f/3.f, 2.f/3.f); float dLeft = Segment(t[LEFT], left).length(); float posBase = dLeft / Segment(t[LEFT], t[RIGHT]).length(); diff --git a/rules/toit.cpp b/rules/toit.cpp index 60d2f7b..1193ca5 100644 --- a/rules/toit.cpp +++ b/rules/toit.cpp @@ -12,8 +12,10 @@ void ToitQuad::getBoundingBoxPoints() { } void ToitQuad::triangulation() { - // TODO : si angles pas acceptables, plat(). - // TODO : toit plat : surélever. + if (c.maxAngle() > Angle::d2r(90+40) || c.minAngle() < Angle::d2r(90-40)) { + plat(); + return; + } switch (hash2(seed, -1) % 5) { case 0: pointCentral(); break; case 1: quatrePoints(); break; @@ -86,7 +88,9 @@ void ToitQuad::deuxPointsVerticaux() { } void ToitQuad::plat() { - addGPUQuad(c, Couleurs::toit); + Quad ch = c.offsetNormal(Dimensions::hauteurToit * 0.6f); + addGPUFourQuads(c, ch, Couleurs::toit); + addGPUQuad(ch, Couleurs::toit); } ToitTri::ToitTri(Triangle _c, float _height) : Chose(), c(_c), height(_height) { @@ -99,6 +103,10 @@ void ToitTri::getBoundingBoxPoints() { } void ToitTri::triangulation() { + if (c.maxAngle() > Angle::d2r(120) || c.minAngle() < Angle::d2r(30)) { + plat(); + return; + } plat(); return; switch (hash2(seed, -1) % 5) { case 0: pointCentral(); break; @@ -143,6 +151,7 @@ void ToitTri::deuxPointsVerticaux() { } void ToitTri::plat() { + Triangle ch = c.offsetNormal(Dimensions::hauteurToit * 0.6f); + addGPUThreeQuads(c, ch, Couleurs::toit); addGPUTriangle(c, Couleurs::toit); } -