modification of the moving light

this is an eg for moving light.how do u make the torous rotate and keep the cube fixed.code plz.to be implemented using visual studio 6.0
#include <GL/glut.h>
#include <stdlib.h>

static int spin = 0,n=60;
int x=0,y=0,z=0;
/* Initialize material property, light source, lighting model,

  • and depth buffer.
    */

void init(void)
{
glClearColor (0.0, 0.0, 0.0, 0.0);
//glShadeModel (GL_SMOOTH);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
glEnable(GL_DEPTH_TEST);
}

/* Here is where the light position is reset after the modeling

  • transformation (glRotated) is called. This places the
  • light at a new position in world coordinates. The cube
  • represents the position of the light.
    */

void display(void)
{

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
GLfloat mat_diffuse[]={.0,1.7,.0,1.0};
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f (0.0, 1.0, 1.0);
glPushMatrix ();
glRotated ((GLdouble) spin, x,y,z);
glLightfv (GL_LIGHT0, GL_POSITION, position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (1.0, .0, 0.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();

glutSolidTorus (0.275, 0.85, 8, 15);

glPopMatrix ();
glFlush ();
}
void display1(void)
{

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
GLfloat mat_diffuse[]={1.0,0.0,.0,1.0};
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f (0.0, 1.0, 1.0);
glPushMatrix ();
glRotated ((GLdouble) spin, x,y,z);
glLightfv (GL_LIGHT0, GL_POSITION, position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (1.0, .0, 0.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();

glutSolidTorus (0.275, 0.85, 8, 15);

glPopMatrix ();
glFlush ();
}
void display2(void)
{

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
GLfloat mat_diffuse[]={.0,1.7,.0,1.0};
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f (0.0, 1.0, 1.0);
glPushMatrix ();
glRotated ((GLdouble) spin, x,y,z);
glLightfv (GL_LIGHT0, GL_POSITION, position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (1.0, .0, 0.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();

glutSolidTorus (0.275, 1.85, 8, 15);

glPopMatrix ();
glFlush ();
}

void reshape (int w, int h)
{
glViewport (0, 0, (GLsizei) w, (GLsizei) h);
glMatrixMode (GL_PROJECTION);
glLoadIdentity();
gluPerspective(40.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}

void mytimer(int v)
{
spin = (spin +5) % 360;
glutTimerFunc(1600/n,mytimer,v);
glutPostRedisplay();
}

void menu(int id)
{
switch(id)
{
case 0:x=1,y=0,z=0;
break;
case 1:x=0,y=1,z=0;
break;
case 2:x=0,y=0,z=1;
break;
case 3:x=0,y=0,z=0;
case 4:glShadeModel (GL_SMOOTH);
break;
case 5:glShadeModel (GL_FLAT);
break;
case 6:exit(0);
break;
case 7:glutDisplayFunc(display1);
break;
case 8:glutDisplayFunc(display);
break;
case 9:glutDisplayFunc(display2);
break;

}

}

int main(int argc, char** argv)
{
glutInit(&argc, argv);
glutInitDisplayMode (GLUT_SINGLE | GLUT_RGB | GLUT_DEPTH);
glutInitWindowSize (500, 500);
glutInitWindowPosition (100, 100);
glutCreateWindow (argv[0]);
init ();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
//glutMouseFunc(mouse);
glutTimerFunc(100,mytimer,n);
glutCreateMenu(menu);
glutAddMenuEntry(“along x axis”,0);
glutAddMenuEntry(“along y axis”,1);
glutAddMenuEntry(“along z axis”,2);
glutAddMenuEntry(“default”,3);
glutAddMenuEntry(“smooth shade model”,4);
glutAddMenuEntry(“flat shade model”,5);
glutAddMenuEntry(“quit”,6);
glutAddMenuEntry(“red”,7);
glutAddMenuEntry(“green”,8);
glutAddMenuEntry(“size change”,9);

glutAttachMenu(GLUT_RIGHT_BUTTON);
glutMainLoop();
return 0;
}

Sandwitch the glutSolidTorus call in push and pop and place the glRotate before drawing the torus

glPushMatrix ();

glRotated ( rotation you want for the torus );

(optional: glTranslate(...) to move the torus)

glutSolidTorus (0.275, 0.85, 8, 15);

glPopMatrix ();

hey i am a complete dud in opengl.ul have to gime the code.plz
is this where u have to add the code u gave(in red).
void display(void)
{

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
GLfloat mat_diffuse[]={.0,1.7,.0,1.0};
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glPushMatrix ();
gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f (0.0, 1.0, 1.0);
glPushMatrix ();
glRotated ((GLdouble) spin, x,y,z);
glLightfv (GL_LIGHT0, GL_POSITION, position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (1.0, .0, 0.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();
[/color]
pushmatrix()
rotate()
translate()
glutSolidTorus (0.275, 0.85, 8, 15);
pop()[color:#333333]

glPopMatrix ();
glFlush ();
}

immediately after pop push matrix agn???
plz write the display func

Yes, it is correct. You can also delete the first push and the last pop, they are not necesary (i’ve marked it with <-- this isn’t necessary) But remove both.

Here is the code (just the same as you wrote):

void display(void)
{

GLfloat position[] = { 0.0, 0.0, 1.5, 1.0 };
GLfloat mat_diffuse[]={.0,1.7,.0,1.0};
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

glPushMatrix (); <-- this isn't necessary

gluLookAt (0.0, 0.0, 5.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0);
glColor3f (0.0, 1.0, 1.0);
glPushMatrix ();
glRotated ((GLdouble) spin, x,y,z);
glLightfv (GL_LIGHT0, GL_POSITION, position);
glMaterialfv(GL_FRONT,GL_DIFFUSE,mat_diffuse);
glTranslated (0.0, 0.0, 1.5);
glDisable (GL_LIGHTING);
glColor3f (1.0, .0, 0.0);
glutWireCube (0.1);
glEnable (GL_LIGHTING);
glPopMatrix ();

pushmatrix()
rotate()
translate()
glutSolidTorus (0.275, 0.85, 8, 15);
pop()

glPopMatrix ();  <-- this isn't necessary

glFlush ();
}

thanks a lot ill try it out and let u know