我试图让一个人在 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;
glutPostRedisplay
不直接触发重绘屏幕。它只是向系统表明屏幕需要尽快重绘。像您一样在循环中多次调用它实际上与调用一次具有相同的效果。看here https://www.opengl.org/documentation/specs/glut/spec3/node20.html更多细节。
我无法判断您发布的代码是从哪里调用的。但是,您想要做的是使用glutIdleFunc
指定一个在无事可做时调用的方法,并在其中执行单帧动画所需的操作并调用glutPostRedisplay
一次。这需要将计时器移到其他地方。
I found 本教程 http://www.lighthouse3d.com/tutorials/glut-tutorial/animation/对 GLUT 动画非常有帮助。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)