Вот ответ, который адаптирует учебник OpenGL Redbook torus.c
Вот их код для рисования тора:
static void torus(int numc, int numt)
{
int i, j, k;
double s, t, x, y, z, twopi;
twopi = 2 * PI_;
for (i = 0; i < numc; i++) {
glBegin(GL_QUAD_STRIP);
for (j = 0; j <= numt; j++) {
for (k = 1; k >= 0; k--) {
s = (i + k) % numc + 0.5;
t = j % numt;
x = (1+.1*cos(s*twopi/numc))*cos(t*twopi/numt);
y = (1+.1*cos(s*twopi/numc))*sin(t*twopi/numt);
z = .1 * sin(s * twopi / numc);
glVertex3f(x, y, z);
}
}
glEnd();
}
}
То, что это делает, рисует объем вращения. Вы можете использовать эту же идею, за исключением остановки этого цикла на полпути (т.е.
for(i = 0; i < numc/2; i++)
)