//Dessin socle ponpon void Socle() { glPushMatrix(); glTranslatef(0, 1.01 + time + ta, 0); glRotatef(90, 1, 0, 0); glColor3f(1, 1, 1); pointCylindre(0.01, 0.08); afficheCylindre(); glPopMatrix(); }
std::vector<Voxel> cylindreVolumique(Point origineAxe, Vector axeVecteur, double rayon,double resolution){ afficheCylindre(10); Point limite(origineAxe.getX()+axeVecteur.getX(), origineAxe.getY()+axeVecteur.getY(),origineAxe.getZ()+axeVecteur.getZ()); int distanceLimite = sqrt( pow(limite.getX()-origineAxe.getX(),2) + pow(limite.getY()-origineAxe.getY(),2) + pow(limite.getZ()-origineAxe.getZ(),2) ); Voxel v(origineAxe, distanceLimite); std::vector<Voxel> listeVoxel; if( voxelAppartientCylindre(origineAxe,axeVecteur, rayon,v)){ listeVoxel.push_back(v); }else if ( v.getRayon() > resolution){ for(int i=0; i<8; i++){ Point centreSubVoxel( (v.getSommet(i).getX()+origineAxe.getX())/2, (v.getSommet(i).getY()+origineAxe.getY())/2, (v.getSommet(i).getZ()+origineAxe.getZ())/2 ); Voxel voxel(centreSubVoxel, distanceLimite/2); if(voxelAppartientCylindre(origineAxe,axeVecteur, rayon,voxel)){ listeVoxel.push_back(voxel); }else if (!voxelHorsCylindre(origineAxe,axeVecteur, rayon,voxel)){ std::vector<Voxel> listeTmp; listeTmp = voxelCylindre(origineAxe, axeVecteur, rayon, centreSubVoxel, distanceLimite/2, resolution); for(Voxel vox : listeTmp){ listeVoxel.push_back(vox); } } } } return listeVoxel; }