void recursSphere(Vecteur a,Vecteur b,Vecteur c,int precision)
{
if (precision==0)
{
Normalize(a);
Normalize(b);
Normalize(c);
glBegin(GL_TRIANGLES);
glNormalV(a);glVertexV(a);
glNormalV(b);glVertexV(b);
glNormalV(c);glVertexV(c);
glEnd();
return;
}
recursSphere(a,(a+b)/2,(a+c)/2,precision-1);
recursSphere((a+b)/2,b,(b+c)/2,precision-1);
recursSphere((a+c)/2,(b+c)/2,c,precision-1);
recursSphere((a+c)/2,(a+b)/2,(b+c)/2,precision-1)
;
}
void Sphere(int precision)
{
recursSphere(Vecteur(1,0,0),Vecteur(0,1,0),Vecteu
r(0,0,1),precision);
recursSphere(Vecteur(0,1,0),Vecteur(-1,0,0),Vecte
ur(0,0,1),precision);
recursSphere(Vecteur(-1,0,0),Vecteur(0,-1,0),Vect
eur(0,0,1),precision);
recursSphere(Vecteur(0,-1,0),Vecteur(1,0,0),Vecte
ur(0,0,1),precision);
recursSphere(Vecteur(0,1,0),Vecteur(1,0,0),Vecteu
r(0,0,-1),precision);
recursSphere(Vecteur(-1,0,0),Vecteur(0,1,0),Vecte
ur(0,0,-1),precision);
recursSphere(Vecteur(0,-1,0),Vecteur(-1,0,0),Vect
eur(0,0,-1),precision);
recursSphere(Vecteur(1,0,0),Vecteur(0,-1,0),Vecte
ur(0,0,-1),precision);
}
je vous laisse adapter ça a votre sauce, sachant que j´utilise une classe "Vecteur" ou j´ai redéfini l´arithmétique vectorielle, et que j´ai surchargé glVertex et glNormal avec "V" pour que ça prenne un vecteur.
Pour ceux qui me diront "et le rayon et le centre ?"
--> gltranslate et glscale sont nos amis 