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
| /**********************************************************************************************************
* Constructeur par defaut
**********************************************************************************************************/
Octree::Octree(Point3D p, GLfloat size) : d_p(p), d_size(size) {
/* Si on est trop grand pour contenir des faces alors, on cree des octree fils */
if(d_size > d_min_size){
/* On reserve la place memoire */
d_fils.reserve(8);
/* Les 4 du haut */
d_fils.push_back(Octree(Point3D(d_p.d_x, d_p.d_y, d_p.d_z), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x, d_p.d_y, d_p.d_z - (d_size / 2)), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x + (d_size / 2), d_p.d_y, d_p.d_z), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x + (d_size / 2), d_p.d_y, d_p.d_z - (d_size / 2)), (d_size / 2)));
/* Les 4 du bas */
d_fils.push_back(Octree(Point3D(d_p.d_x, d_p.d_y - (d_size / 2), d_p.d_z), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x, d_p.d_y - (d_size / 2), d_p.d_z - (d_size / 2)), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x + (d_size / 2), d_p.d_y - (d_size / 2), d_p.d_z), (d_size / 2)));
d_fils.push_back(Octree(Point3D(d_p.d_x + (d_size / 2), d_p.d_y - (d_size / 2), d_p.d_z - (d_size / 2)), (d_size / 2)));
}else{
/* Sinon cet octree est assez petit pour contenir des faces, alors on reserve de la place pour le vecteur de faces */
d_faces.reserve(0);
}
}
/**********************************************************************************************************
* Destructeur par defaut
**********************************************************************************************************/
Octree::~Octree() {
/* Si on etait assez petit pour avoir des faces, il faut les effacer */
if(d_size <= d_min_size){
d_faces.clear();
}else{
/* Sinon on a cree des octree fils, il faut les effacer aussi */
d_fils.clear();
}
} |
Partager