#include <GL/glut.h>
002.
#include <stdio.h>
003.
#include <math.h>
004.
#include <stdlib.h>
005.
006.
#define PI_
3.14159265358979323846
007.
008.
GLuint theTorus;
009.
010.
011.
static
void
torus(
int
numc,
int
numt)
012.
{
013.
int
i, j, k;
014.
double
s, t, x, y, z, twopi;
015.
016.
twopi =
2
* PI_;
017.
for
(i =
0
; i < numc; i++) {
018.
glBegin(GL_QUAD_STRIP);
019.
for
(j =
0
; j <= numt; j++) {
020.
for
(k =
1
; k >=
0
; k--) {
021.
s = (i + k) % numc +
0.5
;
022.
t = j % numt;
023.
024.
x = (
1
+.
1
*cos(s*twopi/numc))*cos(t*twopi/numt);
025.
y = (
1
+.
1
*cos(s*twopi/numc))*sin(t*twopi/numt);
026.
z = .
1
* sin(s * twopi / numc);
027.
glVertex3f(x, y, z);
028.
}
029.
}
030.
glEnd();
031.
}
032.
}
033.
034.
035.
static
void
init(
void
)
036.
{
037.
theTorus = glGenLists (
1
);
038.
glNewList(theTorus, GL_COMPILE);
039.
torus(
8
,
25
);
040.
glEndList();
041.
042.
glShadeModel(GL_FLAT);
043.
glClearColor(
0.0
,
0.0
,
0.0
,
0.0
);
044.
}
045.
046.
047.
void
display(
void
)
048.
{
049.
glClear(GL_COLOR_BUFFER_BIT);
050.
glColor3f (
1.0
,
1.0
,
1.0
);
051.
glCallList(theTorus);
052.
glFlush();
053.
}
054.
055.
056.
void
reshape(
int
w,
int
h)
057.
{
058.
glViewport(
0
,
0
, (GLsizei) w, (GLsizei) h);
059.
glMatrixMode(GL_PROJECTION);
060.
glLoadIdentity();
061.
gluPerspective(
30
, (GLfloat) w/(GLfloat) h,
1.0
,
100.0
);
062.
glMatrixMode(GL_MODELVIEW);
063.
glLoadIdentity();
064.
gluLookAt(
0
,
0
,
10
,
0
,
0
,
0
,
0
,
1
,
0
);
065.
}
066.
067.
068.
069.
void
keyboard(unsigned
char
key,
int
x,
int
y)
070.
{
071.
switch
(key) {
072.
case
'x'
:
073.
case
'X'
:
074.
glRotatef(
30
.,
1.0
,
0.0
,
0.0
);
075.
glutPostRedisplay();
076.
break
;
077.
case
'y'
:
078.
case
'Y'
:
079.
glRotatef(
30
.,
0.0
,
1.0
,
0.0
);
080.
glutPostRedisplay();
081.
break
;
082.
case
'i'
:
083.
case
'I'
:
084.
glLoadIdentity();
085.
gluLookAt(
0
,
0
,
10
,
0
,
0
,
0
,
0
,
1
,
0
);
086.
glutPostRedisplay();
087.
break
;
088.
case
27
:
089.
exit(
0
);
090.
break
;
091.
}
092.
}
093.
094.
int
main(
int
argc,
char
**argv)
095.
{
096.
glutInitWindowSize(
200
,
200
);
097.
glutInit(&argc, argv);
098.
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
099.
glutCreateWindow(argv[
0
]);
100.
init();
101.
glutReshapeFunc(reshape);
102.
glutKeyboardFunc(keyboard);
103.
glutDisplayFunc(display);
104.
glutMainLoop();
105.
return
0
;
106.
}
#include <GL/glut.h>
002.
#include <stdio.h>
003.
#include <math.h>
004.
#include <stdlib.h>
005.
006.
#define PI_
3.14159265358979323846
007.
008.
GLuint theTorus;
009.
010.
011.
static
void
torus(
int
numc,
int
numt)
012.
{
013.
int
i, j, k;
014.
double
s, t, x, y, z, twopi;
015.
016.
twopi =
2
* PI_;
017.
for
(i =
0
; i < numc; i++) {
018.
glBegin(GL_QUAD_STRIP);
019.
for
(j =
0
; j <= numt; j++) {
020.
for
(k =
1
; k >=
0
; k--) {
021.
s = (i + k) % numc +
0.5
;
022.
t = j % numt;
023.
024.
x = (
1
+.
1
*cos(s*twopi/numc))*cos(t*twopi/numt);
025.
y = (
1
+.
1
*cos(s*twopi/numc))*sin(t*twopi/numt);
026.
z = .
1
* sin(s * twopi / numc);
027.
glVertex3f(x, y, z);
028.
}
029.
}
030.
glEnd();
031.
}
032.
}
033.
034.
035.
static
void
init(
void
)
036.
{
037.
theTorus = glGenLists (
1
);
038.
glNewList(theTorus, GL_COMPILE);
039.
torus(
8
,
25
);
040.
glEndList();
041.
042.
glShadeModel(GL_FLAT);
043.
glClearColor(
0.0
,
0.0
,
0.0
,
0.0
);
044.
}
045.
046.
047.
void
display(
void
)
048.
{
049.
glClear(GL_COLOR_BUFFER_BIT);
050.
glColor3f (
1.0
,
1.0
,
1.0
);
051.
glCallList(theTorus);
052.
glFlush();
053.
}
054.
055.
056.
void
reshape(
int
w,
int
h)
057.
{
058.
glViewport(
0
,
0
, (GLsizei) w, (GLsizei) h);
059.
glMatrixMode(GL_PROJECTION);
060.
glLoadIdentity();
061.
gluPerspective(
30
, (GLfloat) w/(GLfloat) h,
1.0
,
100.0
);
062.
glMatrixMode(GL_MODELVIEW);
063.
glLoadIdentity();
064.
gluLookAt(
0
,
0
,
10
,
0
,
0
,
0
,
0
,
1
,
0
);
065.
}
066.
067.
068.
069.
void
keyboard(unsigned
char
key,
int
x,
int
y)
070.
{
071.
switch
(key) {
072.
case
'x'
:
073.
case
'X'
:
074.
glRotatef(
30
.,
1.0
,
0.0
,
0.0
);
075.
glutPostRedisplay();
076.
break
;
077.
case
'y'
:
078.
case
'Y'
:
079.
glRotatef(
30
.,
0.0
,
1.0
,
0.0
);
080.
glutPostRedisplay();
081.
break
;
082.
case
'i'
:
083.
case
'I'
:
084.
glLoadIdentity();
085.
gluLookAt(
0
,
0
,
10
,
0
,
0
,
0
,
0
,
1
,
0
);
086.
glutPostRedisplay();
087.
break
;
088.
case
27
:
089.
exit(
0
);
090.
break
;
091.
}
092.
}
093.
094.
int
main(
int
argc,
char
**argv)
095.
{
096.
glutInitWindowSize(
200
,
200
);
097.
glutInit(&argc, argv);
098.
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB);
099.
glutCreateWindow(argv[
0
]);
100.
init();
101.
glutReshapeFunc(reshape);
102.
glutKeyboardFunc(keyboard);
103.
glutDisplayFunc(display);
104.
glutMainLoop();
105.
return
0
;
106.
}