1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
| /**********************************************************************************************************
* Constructeur par defaut
**********************************************************************************************************/
Octree::Octree(GLfloat x, GLfloat y, GLfloat z, GLfloat size) : d_x(x), d_y(y), d_z(z), d_size(size) {
/* Si on est trop grand pour contenir des faces alors, on cree des octree fils */
if(d_size > d_min_size){
GLfloat middle = (d_size / 2);
/* On reserve la place memoire */
d_fils.reserve(8);
/* Les 4 du haut */
d_fils.push_back(new Octree(d_x, d_y, d_z, middle));
d_fils.push_back(new Octree(d_x, d_y, d_z - middle, middle));
d_fils.push_back(new Octree(d_x + middle, d_y, d_z, middle));
d_fils.push_back(new Octree(d_x + middle, d_y, d_z - middle, middle));
/* Les 4 du bas */
d_fils.push_back(new Octree(d_x, d_y - middle, d_z, middle));
d_fils.push_back(new Octree(d_x, d_y - middle, d_z - middle, middle));
d_fils.push_back(new Octree(d_x + middle, d_y - middle, d_z, middle));
d_fils.push_back(new Octree(d_x + middle, d_y - middle, d_z - middle, middle));
}else{
/* Sinon cet octree est assez petit pour contenir des faces, alors on reserve de la place pour le vecteur de faces */
}
}
/**********************************************************************************************************
* Destructeur par defaut
**********************************************************************************************************/
Octree::~Octree() {
/* Si on etait assez petit pour avoir des faces, il faut les effacer */
if(d_size <= d_min_size){
}else{
for(vector<Octree*>::iterator it = d_fils.begin(); it != d_fils.end(); ++it){
delete (*it);
}
/* Sinon on a cree des octree fils, il faut les effacer aussi */
d_fils.clear();
}
} |
Partager