Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 4 of 4

Thread: OpenGL Programming Guide (7th Edition) Example Not Working

  1. #1
    Junior Member Newbie
    Join Date
    Sep 2011
    Posts
    26

    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:

    Code :
     
    #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!

  2. #2
    Intern Newbie
    Join Date
    Nov 2012
    Posts
    33
    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...

  3. #3
    Junior Member Newbie
    Join Date
    Sep 2011
    Posts
    26
    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?

  4. #4
    Intern Contributor
    Join Date
    Dec 2012
    Posts
    74

    Lightbulb

    Quote Originally Posted by Blakeasd View Post
    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:
    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

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •