OpenGL Programming Guide (7th Edition) Example Not Working

Hello,

I am following the OpenGL Programming Guide (7th Edition) and I can’t get an example to work. In the example a square should rotate after a left mouse button click. I did not copy in paste, I just followed along and wrote the code. When I run the app it works, when I click on it however, the square doesn’t rotate, instead it does a tiny rotation then stops. Here is the code I used:



#include <stdio.h>
#include <OpenGL/OpenGL.h>
#include <GLUT/GLUT.h>


static GLfloat spin = 0.0;


void init(void){
    
    glClearColor(0.0, 0.0, 0.0, 0.0);
    glShadeModel(GL_FLAT);
 


}


void display(void){


    glClear(GL_COLOR_BUFFER_BIT);
    glPushMatrix();
    glRotatef(spin, 0.0, 0.0, 1.0);
    glColor3f(1.0, 1.0, 1.0);
    glRectf(-25.0, -25.0, 25.0, 25.0);
    glPopMatrix();
    glutSwapBuffers();


}


void spinDisplay(void){


    spin = spin + 2.0;
    if (spin > 360.0) {
        spin = spin - 360;
        glutPostRedisplay();
    }


}


void reshape(int w, int h){


    glViewport(0, 0, (GLsizei) w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-50.0, 50.0, -50.0, 50.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    




}


void mouse(int button, int state, int x, int y){




    switch (button) {
        case GLUT_LEFT_BUTTON:
            if (state == GLUT_DOWN) 
                glutIdleFunc(spinDisplay);    
            
            break;
        case GLUT_MIDDLE_BUTTON:
            if (state == GLUT_DOWN) {
                glutIdleFunc(NULL);
            
            
            break;
        default:
            break;
    }


    }
}


int main(int argc, const char * argv[])
{


    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
    glutInitWindowSize(250, 250);
    glutInitWindowPosition(100, 100);
    glutCreateWindow(argv[0]);
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMouseFunc(mouse);
    glutMainLoop();
    return 0;
    }




Does anyone know why when I click on it, the square rotates a very small amount, then stops? I am using OS X 10.8 and Xcode 4.5 if that matters.

Thanks!

In your switch statement for the mouse buttons, you’ve got a curly brace mismatch after GLUT_MIDDLE_BUTTON. I can’t say if that’s actually the problem, as it doesn’t seem like it would even compile that way…

I fixed the curly brace mismatch, but it still doesn’t have a complete rotation. It rotates to the left, very slightly, and stops. Any Ideas?

See the following section in your code:


void spinDisplay(void){
 
 
    spin = spin + 2.0;
    if (spin > 360.0) {
        spin = spin - 360;
        glutPostRedisplay();   }
 
 
}

Why do you put the “glutPostRedisplay()” in the curly brace of “if(spin>360.0)”, you mean only to call display function whence the spin is a little greater than 360.0?
Move it out of that curly brace and see the effects.

Best Regards,

newbiecow