www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs

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 }