m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
}
}
}
if(getVoxel(i+1,j,k)==2){
//Si le voxel de droite est un voxel de l'extérieur
m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
}
}
}
if(getVoxel(i,j-1,k)==2){
//Si le voxel en dessous est un voxel de l'extérieur
m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
}
}
}
if(getVoxel(i,j+1,k)==2){
//Si le voxel au dessus est un voxel de l'extérieur
m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
}
}
}
if(getVoxel(i,j,k-1)==2){
//Si le voxel derrière est un voxel de l'extérieur
m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
m_indexes[x+y*m_taille_x+z*m_taille_x*m_taille_y]=m_sommets.size();//On précise l'index du nouveau sommet
m_sommets.push_back(Geom::Vec3f(m_bb_min[0]+x*transfo_x,m_bb_min[1]+y*transfo_y,m_bb_min[2]+z*transfo_z));//On ajoute le sommet avec ses coordonnées réelles
}
if(index_sommet==m_indexes.end()){
m_faces.push_back(m_sommets.size()-1);//On ajoute le sommet au tableau renseignant les faces
}
else{
m_faces.push_back(index_sommet->second);//On ajoute le sommet au tableau renseignant les faces
}
}
}
}
}
}
}
CGoGNout<<".. fait. "<<m_faces.size()/4.<<" faces représentant le bord."<<CGoGNendl;
}
intgetNbSommets(){returnm_sommets.size();}
intgetNbFaces(){returnm_faces.size()/4;}
private:
intm_size;
intm_taille_x;
intm_taille_y;
intm_taille_z;
Geom::Vec3fm_bb_min;
Geom::Vec3fm_bb_max;
std::vector<int>m_data;//Vecteur renseignant l'ensemble des voxels entourant le maillage
std::map<int,int>m_indexes;//Hashmap qui permet de vérifier si un sommet a déjà été ajouté à la liste des sommets
public:
std::vector<Geom::Vec3f>m_sommets;//Vecteur renseignant les coordonnées réelles des sommets de la surface
std::vector<int>m_faces;//Vecteur renseignant les sommets attribués à chaque face