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!