terrain.cpp (1757B)
1 #include "all_includes.hh" 2 3 TerrainQuad::TerrainQuad(Quad _c, bool _addTrees) : Chose(), c(_c), addTrees(_addTrees) { 4 addEntropy(c); 5 } 6 7 void TerrainQuad::split() { 8 if (!addTrees) return; 9 10 addChild(new TerrainQuad(c, false)); 11 12 Vertex p[10]; 13 int maxNArbres = std::min(10, (int)(c.surface() / (7.f*7.f*100.f*100.f))); 14 int pi = 0; 15 int nArbres = hash2(seed, -1) % (maxNArbres + 1); 16 for (int essai = 0; essai < nArbres * 2 && pi < nArbres; essai++) { 17 p[pi] = c.insetProportionnal(0.7f).randomPoint(seed, essai); 18 bool success = true; 19 for (int j = 0; j < pi; j++) { 20 if (Segment(p[j], p[pi]).length() < 3 * 100) { 21 success = false; 22 break; 23 } 24 } 25 if (success) pi++; 26 } 27 for (int i = 0; i < pi; i++) { 28 addChild(new Arbre(p[i], c)); 29 } 30 } 31 32 void TerrainQuad::getBoundingBoxPoints() { 33 addBBPoints(c); 34 } 35 36 void TerrainQuad::triangulation() { 37 addGPUQuad(c, Couleurs::herbe); 38 } 39 40 TerrainTri::TerrainTri(Triangle _c, bool _addTrees) : Chose(), c(_c), addTrees(_addTrees) { 41 addEntropy(c); 42 } 43 44 void TerrainTri::split() { 45 if (!addTrees) return; 46 47 addChild(new TerrainTri(c, false)); 48 49 Vertex p[10]; 50 int maxNArbres = std::min(10, (int)(c.surface() / (7.f*7.f*100.f*100.f))); 51 int pi = 0; 52 int nArbres = hash2(seed, -1) % (maxNArbres + 1); 53 for (int essai = 0; essai < nArbres * 2 && pi < nArbres; essai++) { 54 p[pi] = c.insetProportionnal(0.7f).randomPoint(seed, essai); 55 bool success = true; 56 for (int j = 0; j < pi; j++) { 57 if (Segment(p[j], p[pi]).length() < 3 * 100) { 58 success = false; 59 break; 60 } 61 } 62 if (success) pi++; 63 } 64 for (int i = 0; i < pi; i++) { 65 addChild(new Arbre(p[i], c)); 66 } 67 } 68 69 void TerrainTri::getBoundingBoxPoints() { 70 addBBPoints(c); 71 } 72 73 void TerrainTri::triangulation() { 74 addGPUTriangle(c, Couleurs::herbe); 75 }