Пример #1
0
//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();
}
Пример #2
0
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;
}