glutPostRedisplay在循环中不起作用

时间:2014-10-07 23:47:52

标签: opengl

我试图让一个男人跳到y轴上,所以我使用了2秒的循环,第一秒它应该向下移动并弯曲膝盖,第二秒它应该向上移动然后完成起始位置。现在我刚刚开始让这个男人在第一秒内跪下来弯曲它,我没有编写动画的其余部分。问题是glutPostRedisplay没有根据需要刷新循环内的屏幕,所以看起来像动画,它只是在循环完成后重新显示屏幕。我如何让glutPostRedisplay刷新我的循环中的屏幕,使它看起来像一个动画?

case ' ':
     miliseconds = 0;
     MoveManY = 0;
     start = clock();
     i=0;
     while (miliseconds<2000)
     {
        finish = clock();
        miliseconds = (finish - start);
        Sleep(1);
        if (miliseconds<1000)
        {
            MoveManY=MoveManY-0.02;
        }
        glutPostRedisplay();
     }
     break;

1 个答案:

答案 0 :(得分:4)

glutPostRedisplay不会直接触发重绘屏幕。它仅向系统指示屏幕需要尽快重绘。像你一样在循环中多次调用它实际上与调用它一样具有相同的效果。有关详细信息,请参阅here

我无法分辨你发布的代码在哪里。但是,您要做的是使用glutIdleFunc指定一个方法,当没有其他任何事情可以执行时,并在其中执行动画的单帧所需的操作并调用{ {1}}一次。这将需要将您的计时器移动到其他地方。

我发现this tutorial对GLUT动画非常有帮助。