GLUT Timer/Idle 函数未更新

GLUT Timer/Idle function not updating

我想在用户无需执行任何操作的情况下保持对象向前移动。我知道这是 glutTimerFunc 的工作,我相信我正在正确实施它,如下所示。出于某种原因,如果我保持屏幕不变,则不会有任何更新;但如果我移动鼠标(或创建任何类型的 'event'),场景就会更新。如果我等待几秒钟然后自己重​​新触发更新,则对象会在那几秒钟内移动它应该拥有的数量(例如,如果它每秒移动一个单位,则在等待 3 秒并重新触发后对象会跳跃 3 个单位)。因此计时器正在工作,但我只是不知道为什么屏幕不经常重新显示。

void myTimer(int v) {
  if (forward == 1) {
    //increment movement variable
  }
  if (backward == 1) {
    //increment movement variable
  }
  glutPostRedisplay;
  glutTimerFunc(100 / n, myTimer, v);
}

下面是我的上下(前进和后退)键的片段:

if (key == GLUT_KEY_UP)
{
    forward = 1;
    backward = 0;
}
if (key == GLUT_KEY_DOWN)
  {
    forward = 0;
    backward = 1;
}

我在 glutMainLoop() 之前的主函数中也有回调 glutTimerFunc(1000, myTimer, n);

为什么我的定时器没有触发屏幕重新渲染?

glutPostRedisplay;
                 ^ missing something? 

这只是评估 glutPostRedisplay 的地址,实际上并没有做任何事情。

您需要空括号才能实际 调用 glutPostRedisplay():

glutPostRedisplay();