76 lines
1.7 KiB
C++
76 lines
1.7 KiB
C++
#include "all_includes.hh"
|
|
|
|
TerrainQuad::TerrainQuad(Quad _c, bool _addTrees) : Chose(), c(_c), addTrees(_addTrees) {
|
|
addEntropy(c);
|
|
}
|
|
|
|
void TerrainQuad::split() {
|
|
if (!addTrees) return;
|
|
|
|
addChild(new TerrainQuad(c, false));
|
|
|
|
Vertex p[10];
|
|
int maxNArbres = std::min(10, (int)(c.surface() / (7.f*7.f*100.f*100.f)));
|
|
int pi = 0;
|
|
int nArbres = hash2(seed, -1) % (maxNArbres + 1);
|
|
for (int essai = 0; essai < nArbres * 2 && pi < nArbres; essai++) {
|
|
p[pi] = c.insetProportionnal(0.7f).randomPoint(seed, essai);
|
|
bool success = true;
|
|
for (int j = 0; j < pi; j++) {
|
|
if (Segment(p[j], p[pi]).length() < 3 * 100) {
|
|
success = false;
|
|
break;
|
|
}
|
|
}
|
|
if (success) pi++;
|
|
}
|
|
for (int i = 0; i < pi; i++) {
|
|
addChild(new Arbre(p[i], c));
|
|
}
|
|
}
|
|
|
|
void TerrainQuad::getBoundingBoxPoints() {
|
|
addBBPoints(c);
|
|
}
|
|
|
|
void TerrainQuad::triangulation() {
|
|
addGPUQuad(c, Couleurs::herbe);
|
|
}
|
|
|
|
TerrainTri::TerrainTri(Triangle _c, bool _addTrees) : Chose(), c(_c), addTrees(_addTrees) {
|
|
addEntropy(c);
|
|
}
|
|
|
|
void TerrainTri::split() {
|
|
if (!addTrees) return;
|
|
|
|
addChild(new TerrainTri(c, false));
|
|
|
|
Vertex p[10];
|
|
int maxNArbres = std::min(10, (int)(c.surface() / (7.f*7.f*100.f*100.f)));
|
|
int pi = 0;
|
|
int nArbres = hash2(seed, -1) % (maxNArbres + 1);
|
|
for (int essai = 0; essai < nArbres * 2 && pi < nArbres; essai++) {
|
|
p[pi] = c.insetProportionnal(0.7f).randomPoint(seed, essai);
|
|
bool success = true;
|
|
for (int j = 0; j < pi; j++) {
|
|
if (Segment(p[j], p[pi]).length() < 3 * 100) {
|
|
success = false;
|
|
break;
|
|
}
|
|
}
|
|
if (success) pi++;
|
|
}
|
|
for (int i = 0; i < pi; i++) {
|
|
addChild(new Arbre(p[i], c));
|
|
}
|
|
}
|
|
|
|
void TerrainTri::getBoundingBoxPoints() {
|
|
addBBPoints(c);
|
|
}
|
|
|
|
void TerrainTri::triangulation() {
|
|
addGPUTriangle(c, Couleurs::herbe);
|
|
}
|