OGL display problem

Started by
0 comments, last by easlern 22 years ago
Could someone please explain to me why this window does not refresh correctly? I have two red spheres, a big one and a little one orbiting it. As it stands, I have to force it with glutPostRedisplay() to get it to calculate and display the new position of the orbiting object. I have modified example 5-9 from the red book to create this. I''m not sure how to use the code formatting tag or whatever so here goes: #include <GL/glut.h> #include <stdlib.h> GLfloat diffuseMaterial[4] = {1.0, 0.0, 0.0, 1.0}; GLfloat angle = 0; GLfloat light_position[] = {1.0, 1.0, 1.0, 0.0};; void init (void){ GLfloat mat_specular[] = {1.0, 1.0, 1.0, 1.0}; glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_SMOOTH); glEnable (GL_DEPTH_TEST); glMaterialfv (GL_FRONT, GL_DIFFUSE, diffuseMaterial); glMaterialfv (GL_FRONT, GL_SPECULAR, mat_specular); glMaterialf (GL_FRONT, GL_SHININESS, 25.0); glLightfv (GL_LIGHT0, GL_POSITION, light_position); glEnable (GL_LIGHTING); glEnable (GL_LIGHT0); } void display (void){ glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glutSolidSphere (1.0, 30, 26); angle += 0.5; if (angle > 360) angle -= 360; glLoadIdentity(); glPushMatrix(); // glLoadIdentity(); glRotatef (angle, 0.0, 0.0, 1.0); glTranslatef (0.0, 1.2, 0.0); //glRotatef (angle, 0.0, 0.0, 1.0); glutSolidSphere (0.2, 20, 16); //glLightfv (GL_LIGHT0, GL_POSITION, light_position); glPopMatrix(); glutSwapBuffers(); } void reshape (int w, int h){ glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity(); if (w <= h) glOrtho (-1.5, 1.5, -1.5 * (GLfloat)h / (GLfloat)w, 1.5 * (GLfloat)h / (GLfloat)w, -10.0, 10.0); else glOrtho (-1.5 * (GLfloat)w / (GLfloat)h, 1.5 * (GLfloat)w / (GLfloat)h, -1.5, 1.5, -10.0, 10.0); glMatrixMode (GL_MODELVIEW); glLoadIdentity(); } void mouse (int button, int state, int x, int y){ glutPostRedisplay(); } int main (int args, char** argv){ glutInit (&args, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init(); glutDisplayFunc (display); glutReshapeFunc (reshape); glutMouseFunc (mouse); glutMainLoop(); return 0; }
Advertisement
I got it to work using glutIdleFunc (display) but I know I shouldn''t have to do this, because I''ve never had to tell glut to display before. What am I missing?

This topic is closed to new replies.

Advertisement