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;
}