2011-m2s3-city-builder/rules/chose.cpp
Georges Dupéron 86c8626586 Zut
2011-11-28 07:41:30 +01:00

59 lines
1.6 KiB
C++

#include "all_includes.hh"
Chose::Chose() : seed(initialSeed) {}
std::ostream& operator<<(std::ostream& os, const Chose* c) {
return os << *c;
}
std::ostream& operator<<(std::ostream& os, const Chose& c) {
(void)c; // unused
return os << "Chose";
}
void Chose::initChildren(int n) {
children = std::vector<Chose*>(n);
}
void Chose::initTriangles(int n) {
triangles = std::vector<Triangle*>(n);
}
void Chose::addChild(Chose* c) {
children.push_back(c);
}
void Chose::use() {
// Lorsqu'on utilise une Chose c, on la split d'abbord (on
// n'utilisera pas les fils tout de suite, donc pas de récursion).
subdivide();
gainErrorSurfacePerTriangle = errorSurfacePerTriangle;
std::vector<Chose*>::iterator it;
for (it = children.begin(); it != children.end(); ++it) {
gainErrorSurfacePerTriangle -= it->errorSurfacePerTriangle);
}
// TODO : isLeaf = true;
}
void Chose::unuse() {
// TODO : isLeaf = false;
}
void Chose::addTriangle(Triangle* t) {
triangles.push_back(t);
}
void Chose::setErrorVolume(int errorVolume) {
// Calcul d'une approximation de la surface d'erreur à l'écran, en
// considérant que l'objet est en fait juste une texture plaquée
// sur un plan perpendiculaire au sol et parallèle à l'écran.
errorSurfacePerTriangle = pow((float)errorVolume / (float)triangles.size(), 2.f/3.f);
}
// int Chose::gainScreenSurfacePerTriangle(Vertex camera) {
int Chose::gainScreenSurfacePerTriangle(Vertex camera) {
int frontFrustumDist = 1; // TODO : valeur bidon.
// Surface de la projection à l'écran de la surface d'erreur :
return (int)(gainErrorSurfacePerTriangle * (frontFrustumDist * frontFrustumDist) / (distance * distance));
}