/********* MICROSQUEL : squelette de programme OpenGL *********\ \* cc microsquel.c -o microsquel -lglut -lGLU -lGL -lXmu -lX11 -lm */ #include /* contient déjà et */ #include void resetgraph(), initgraph(); int SIZEX,SIZEY; /* taille de la fenêtre */ GLfloat light_pos[4] = { 0., 0., 1., 0.}; /* lum à l'infini */ float Cphi=0, Otheta=0, scale=3; /*orientations */ /* description géométrique de l'objet 2 (pyramide). */ #define SQRT2 1.4142138 /* sqrt(2) */ #define SQRT3S2 .8660254 /* sqrt(3)/2 */ #define HH .4714045 /* sqrt(2)/3 */ #define nb_faces 4 float coords[nb_faces][3] = { {0,SQRT2,0}, {-SQRT3S2,0,-.5}, {SQRT3S2,0,-.5}, {0,0,1.} }; /* couleurs aux sommets et non pas aux faces (i.e. interpolées) */ float colors[nb_faces][3] = { {.4,.4,.4},{1,0,0},{0,1,0},{0,0,1} }; int faces[nb_faces][3] = { {0,1,2}, {0,2,3}, {0,3,1}, {3,2,1} }; /* normales aux faces et non aux sommets (i.e. objet pas lisse) */ float normals[nb_faces][3] = { {0,1/3.,-2*HH},{HH,1/3.,SQRT3S2*HH},{-HH,1/3.,SQRT3S2*HH},{0,-1,0} }; void draw_scene() { /* tracé de la scène */ int i; glPushMatrix(); glTranslatef(-4.,0.,0.); glRotatef(Otheta*180/M_PI, 1,0,0); /* on oriente l'objet 1 */ glColor3f(1.,.5,.5); glutSolidTorus(1.,2.,20,30); glPopMatrix(); glPushMatrix(); glTranslatef(4.,0.,0.); glRotatef(20, 1,0,0); /* on oriente l'objet 2 */ glScalef(scale,scale,scale); glBegin(GL_TRIANGLES); for(i=0; i