Hello! I have been staring at this for hours and have played around with all of the logic and numbers and nothing seems to do what I want. I am trying to create an animation that shows how a shape or object is actually rotated in openGL… so I create an object at a particular point in space, I need to animate it moving to the origin, rotating, and then translating back. So I have been able to get the shape to move around, but once it hit the x = 0 point, instead of changing directions, it stays in a jittering mode, like the direction is continuously getting changed…but I can’t seem to understand where my code is doing this. I have pretty much commented everything out so I know where the culprit is but I have no idea where I am going wrong Can anyone please help? I am doing this in baby steps, so as soon as I get the x-direction working I’ll start adding in the y and z directions as well as the rotation at the origin…
Thanks!! I have taken out all of the commented code that is not in use yet for legibility…I don’t think any of it is relevant to my problem…
{void display(void)
{
//color buffer gets cleared everytime a new frame is drawn
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();
setWindow(-9.0, 9.0, -1.0, 1.0); // set the window
glColor3f(1,0,0);
glTranslated(xPos, yPos, 0.0);
glutWireCube(.25); //***THIS WORKS***
glutSwapBuffers();
if (xDirection==0){ //if moving left
xPos-=0.0005; //move in a negative direction along the xaxis
}
else if (xDirection==1){
xPos+=0.0005; //otherwise move in the positive direction
}
if (xPos > 0.0) {
xDirection=0;
}
else {
xDirection=1;
}
glutPostRedisplay();
}
int main(int argc, char** argv){
glutInit(&argc, argv);
//glutInitDisplayMode (GLUT_RGB | GLUT_DEPTH | GLUT_DOUBLE); //double pixel buffer that holds RGB
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
glutInitWindowSize(800, 800);
glutInitWindowPosition(0,0);
glutCreateWindow(argv[0]);
init();
glutDisplayFunc(display);
glutReshapeFunc(reshape);
glutKeyboardFunc(keyboard);
//glutIdleFunc(animate);
glutIdleFunc(display);
glutMainLoop();
return 0;
}