diff --git a/all_includes.hh b/all_includes.hh index 6b773b2..a22cdf5 100644 --- a/all_includes.hh +++ b/all_includes.hh @@ -33,7 +33,7 @@ class Chose; #include "view.hh" #include "rules/chose.hh" -#include "rules/architecture/couleurs.hh" +#include "rules/architecture/couleursDimensions.hh" #include "rules/architecture/arche.hh" #include "rules/architecture/batiment.hh" diff --git a/geometry/quad.cpp b/geometry/quad.cpp index 8f886d9..a45bd3b 100644 --- a/geometry/quad.cpp +++ b/geometry/quad.cpp @@ -169,8 +169,8 @@ Coin Quad::concaveCorner() { float dse2 = (nsw - nse).norm(); float dsw1 = (nse - nsw).norm(); float dsw2 = (nnw - nsw).norm(); - //float dnw1 = (nsw - nnw).norm(); - //float dnw2 = (nne - nnw).norm(); + float dnw1 = (nsw - nnw).norm(); + float dnw2 = (nne - nnw).norm(); if(dne1 >= 1.5 && dne2 >= 1.5) return NE; @@ -178,8 +178,10 @@ Coin Quad::concaveCorner() { return SE; else if(dsw1 >= 1.5 && dsw2 >= 1.5) return SW; - else + else if(dnw1 >= 1.5 && dnw2 >= 1.5) return NW; + else + return maxAngleCorner(); } bool Quad::isConcave() { @@ -196,7 +198,7 @@ bool Quad::isConcave() { if(dne1 >= 1.5 || dse1 >= 1.5 || dsw1 >= 1.5 || dnw1 >= 1.5) return true; - return false; + return (maxAngle() > Angle::d2r(160)); } Quad operator+(const Quad& q, const Vertex& v) { diff --git a/geometry/triangle.cpp b/geometry/triangle.cpp index c0088c4..e18863c 100644 --- a/geometry/triangle.cpp +++ b/geometry/triangle.cpp @@ -11,6 +11,7 @@ float Triangle::cosAngle() const { } float Triangle::angle() const { + // TODO : gérer le cas d'un angle à 0 ou 180. return std::acos(cosAngle()); } diff --git a/lod.cpp b/lod.cpp index 39de2d7..bd5624e 100644 --- a/lod.cpp +++ b/lod.cpp @@ -112,7 +112,6 @@ void Lod::addSplitCube(Chose* c) { splitOut[i].insert(c->lod.splitBox[i], c); } } - // TODO : plutôt que d'ajouter puis enlever, précalculer puis enlever si nécessaire. if (c->lod.inCounter == 6) { for(int i = 0; i < 6; i++) splitIn[i].remove(c->lod.splitBox[i], c); diff --git a/lod.hh b/lod.hh index 3bd38e9..f999449 100644 --- a/lod.hh +++ b/lod.hh @@ -5,8 +5,6 @@ class Lod { private : - // TODO : puisqu'on utilise *soit* la mergeBox, *soit* la - // splitBox, réutiliser le heap In pour merge. Heap merge[6]; // {xMin, xMax, yMin, yMax, zMin, zMax}. Heap splitIn[6]; // {xMinIn, xMaxIn, yMinIn, yMaxIn, zMinIn, zMaxIn}. Heap splitOut[6]; // {xMinOut, xMaxOut, yMinOut, yMaxOut, zMinOut, zMaxOut}. diff --git a/main.cpp b/main.cpp index c00cea2..5418ab4 100644 --- a/main.cpp +++ b/main.cpp @@ -1,11 +1,9 @@ #include "all_includes.hh" -// TODO : créer les routes dans les bâtiments - int main() { // Générer une tile de base std::cout << "Initial seed = " << Chose::initialSeed << std::endl; - float size = 22000; + float size = 200 * 100; Vertex ne(size, size, 0); Vertex se(size, 0, 0); Vertex sw(0, 0, 0); diff --git a/rules/architecture/couleurs.cpp b/rules/architecture/couleurs.cpp deleted file mode 100644 index 8dad60e..0000000 --- a/rules/architecture/couleurs.cpp +++ /dev/null @@ -1,3 +0,0 @@ -#include "all_includes.hh" - -const unsigned int Couleurs::fog = mix(skyTop, skyBottom, 0.5); diff --git a/rules/architecture/couleursDimensions.cpp b/rules/architecture/couleursDimensions.cpp new file mode 100644 index 0000000..5f24a86 --- /dev/null +++ b/rules/architecture/couleursDimensions.cpp @@ -0,0 +1,3 @@ +#include "all_includes.hh" + +const unsigned int Couleurs::fog = mix(cielHaut, cielBas, 0.5); diff --git a/rules/architecture/couleurs.hh b/rules/architecture/couleursDimensions.hh similarity index 75% rename from rules/architecture/couleurs.hh rename to rules/architecture/couleursDimensions.hh index 63481eb..51ae957 100644 --- a/rules/architecture/couleurs.hh +++ b/rules/architecture/couleursDimensions.hh @@ -1,5 +1,5 @@ -#ifndef _RULES_ARCHITECTURE_COLORS_HH_ -#define _RULES_ARCHITECTURE_COLORS_HH_ +#ifndef _RULES_ARCHITECTURE_COLULEURSDIMENSIONS_HH_ +#define _RULES_ARCHITECTURE_COLULEURSDIMENSIONS_HH_ #include "all_includes.hh" @@ -25,9 +25,15 @@ public: static const unsigned int trottoir = 0x666666; static const unsigned int bordureTrottoir = 0xAAAAAA; static const unsigned int herbe = 0x0c4010; // 11AA22 - static const unsigned int skyTop = 0x3c14ff; - static const unsigned int skyBottom = 0x7F7FFF; + static const unsigned int cielHaut = 0x3c14ff; + static const unsigned int cielBas = 0x7F7FFF; static const unsigned int fog; // définie dans couleurs.cpp . }; +class Dimensions { +public: + static const unsigned int largeurRoute = 200; + static const unsigned int largeurTrottoir = 140; +}; + #endif diff --git a/rules/architecture/quartier.cpp b/rules/architecture/quartier.cpp index 7dafca6..1ace9a8 100644 --- a/rules/architecture/quartier.cpp +++ b/rules/architecture/quartier.cpp @@ -38,7 +38,7 @@ void QuartierQuad::triangulation() { 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 ci = c.insetNESW(Dimensions::largeurRoute + Dimensions::largeurTrottoir); Quad cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). addGPUQuad(c, Couleurs::route); addGPUQuad(cih, Couleurs::toit); @@ -49,7 +49,7 @@ 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 ci = t.insetLTR(Dimensions::largeurRoute + Dimensions::largeurTrottoir); Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). addGPUTriangle(t, Couleurs::route); addGPUTriangle(cih, Couleurs::toit); @@ -106,8 +106,8 @@ void QuartierQuad::carre() { 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); + Quad qtrottoir = c.insetNESW(Dimensions::largeurRoute); + Quad qinterieur = qtrottoir.insetNESW(Dimensions::largeurTrottoir); Quad qbatiments = qinterieur.offsetNormal(hauteurTrottoir); for (int i = 0; i < 4; i++) { @@ -144,7 +144,7 @@ bool QuartierTri::split() { bool angleAigu = minAngle < Angle::d2r(30); bool anglesAcceptable = !angleAigu && !angleObtus; if (!big && proba(seed, -1, 1, 20)) { - batiments(); // TODO : RouteTrottoirTri(c); + batiments(); } else if (big && anglesAcceptable) { switch (hash2(seed, -2) % 3) { case 0: centre(); break; @@ -165,7 +165,7 @@ bool QuartierTri::split() { } void QuartierTri::triangulation() { - Triangle ci = c.insetLTR(250 + 140); // TODO : factoriser cette longueur (largeur route + largeur trottoir). + Triangle ci = c.insetLTR(Dimensions::largeurRoute + Dimensions::largeurTrottoir); Triangle cih = ci.offsetNormal(600); // TODO : factoriser cette longueur (hauteur max des bâtiments). addGPUTriangle(c, Couleurs::route); addGPUTriangle(cih, Couleurs::toit); @@ -205,8 +205,8 @@ void QuartierTri::trapeze() { void QuartierTri::batiments() { return; float hauteurTrottoir = 14; // 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); + Triangle ttrottoir = c.insetLTR(Dimensions::largeurRoute); + Triangle tinterieur = ttrottoir.insetLTR(Dimensions::largeurTrottoir); Triangle tbatiments = tinterieur.offsetNormal(hauteurTrottoir); for (int i = 0; i < 3; i++) { diff --git a/rules/batiment/batimenttri.cpp b/rules/batiment/batimenttri.cpp index 4eec355..1cd3454 100644 --- a/rules/batiment/batimenttri.cpp +++ b/rules/batiment/batimenttri.cpp @@ -19,10 +19,10 @@ bool BatimentTri::split() { // } else { // int th = 20; // Terrain height. // Quad q = Quad(c[NE],c[SE],c[SW],c[NW]); - // q.offset(N,-140); - // q.offset(E,-140); - // q.offset(S,-140); - // q.offset(W,-140); + // q.offset(N,-Dimensions::largeurTrottoir); + // q.offset(E,-Dimensions::largeurTrottoir); + // q.offset(S,-Dimensions::largeurTrottoir); + // q.offset(W,-Dimensions::largeurTrottoir); // addChild(new TrottoirQuadNormal(Quad(c[NE],c[SE],q[SE],q[NE]),th,E)); // addChild(new TrottoirQuadNormal(Quad(c[SE],c[SW],q[SW],q[SE]),th,E)); diff --git a/rules/chose.cpp b/rules/chose.cpp index 069b08e..7dfff1d 100644 --- a/rules/chose.cpp +++ b/rules/chose.cpp @@ -7,7 +7,6 @@ Chose::Chose() : seed(initialSeed), children() { void Chose::clearChildren() { std::vector::iterator it; for (it = children.begin(); it != children.end(); it++) - // TODO : d'abbord virer *it des arbres de LOD ! delete *it; children.clear(); } @@ -163,4 +162,4 @@ void Chose::drawAABB() { ); } -unsigned int Chose::initialSeed = 187001748;//random_seed(); +unsigned int Chose::initialSeed = random_seed(); diff --git a/view.cpp b/view.cpp index 23fbdf8..7b7cad8 100644 --- a/view.cpp +++ b/view.cpp @@ -2,7 +2,7 @@ View::View(Chose* _root) : root(_root), - camera(Camera(Vertex(2980,1567,16012), 45, 150, 1000, 0.6f)), + camera(Camera(Vertex(2980,1567,16012), 45, 150, 10000, 0.6f)), lod(camera.cameraCenter, _root) { fogColor[0] = Couleurs::r(Couleurs::fog) / 255.f; @@ -50,7 +50,7 @@ void View::initWindow() { glFogi (GL_FOG_MODE, GL_LINEAR); glFogfv (GL_FOG_COLOR, fogColor); glFogf (GL_FOG_START, backFrustum / sqrt(3) / 2.f); - glFogf (GL_FOG_END, backFrustum / sqrt(3)); + glFogf (GL_FOG_END, backFrustum / sqrt(3) * 0.9); //glHint (GL_FOG_HINT, GL_NICEST); } @@ -102,10 +102,10 @@ void View::setSkybox() { for(int ii=0; ii<4;ii++) { glBegin(GL_QUADS); { - glColor3ub(Couleurs::r(Couleurs::skyBottom),Couleurs::g(Couleurs::skyBottom),Couleurs::b(Couleurs::skyBottom)); + glColor3ub(Couleurs::r(Couleurs::cielBas),Couleurs::g(Couleurs::cielBas),Couleurs::b(Couleurs::cielBas)); glVertex3f(-d,d,-d); glVertex3f(d,d,-d); - glColor3ub(Couleurs::r(Couleurs::skyTop),Couleurs::g(Couleurs::skyTop),Couleurs::b(Couleurs::skyTop)); + glColor3ub(Couleurs::r(Couleurs::cielHaut),Couleurs::g(Couleurs::cielHaut),Couleurs::b(Couleurs::cielHaut)); glVertex3f(d,d,d); glVertex3f(-d,d,d); } @@ -115,7 +115,7 @@ void View::setSkybox() { glBegin(GL_QUADS); { - glColor3ub(Couleurs::r(Couleurs::skyTop),Couleurs::g(Couleurs::skyTop),Couleurs::b(Couleurs::skyTop)); + glColor3ub(Couleurs::r(Couleurs::cielHaut),Couleurs::g(Couleurs::cielHaut),Couleurs::b(Couleurs::cielHaut)); glVertex3f(-d,d,d); glVertex3f(d,d,d); glVertex3f(d,-d,d);