//------------------------------------------------------------ static void CalcPointTorus(double R,double r,double t,double a,double z) { glVertex3d( (R + r*cos(a))*cos(t), (R + r*cos(a))*sin(t), z+r*sin(a) ); } //------------------------------------------------------------ // creer un torus d'axes z de grand rayon <R> et de petit rayon <r> // le commencement de fait a z=0 et la fin a z=<dz> void MyCreateTorus(double R,double r,int nVertex,int slices,double angleBegin,double angleEnd,double dz) { double theta,stepTheta,oldTheta; double stepAlpha; double z,oldZ,stepDz; stepTheta = (angleEnd - angleBegin)/((double)nVertex); stepAlpha = 2.*PI/slices; stepDz = dz/((double)nVertex); glBegin(GL_TRIANGLE_STRIP); oldTheta = angleBegin; oldZ = 0.; z = stepDz; for(theta=angleBegin+stepTheta;theta<=angleEnd+EPSILON;theta+=stepTheta) { double a,b; // alpha,beta for(a=0.,b=0.5*stepAlpha;a<=2.*PI+EPSILON;a+=stepAlpha,b+=stepAlpha) { CalcPointTorus(R,r,oldTheta ,b,oldZ); CalcPointTorus(R,r,theta ,a,z); } oldTheta = theta; oldZ = z; z += stepDz; } glEnd(); }
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question