OpenGL中的键盘事件与过剩

时间:2011-07-30 03:15:57

标签: opengl glut

我正在使用过滤库对OpenGL进行编程,我遇到了用键盘控制对象位置的问题。

我有以下用于glutKeyboardFunc的回调函数

void handleKeypress (unsigned char key, int x, int y)
{
 switch (key)
{
case 27:
  exit (0); break;
case 'w':
  position_y += 0.2f; break;
case 's':
  position_y -= 0.2f; break;
case 'a':
  position_x -= 0.2f; break;
case 'd':
  position_x += 0.2f; break;
case 'q':
  depth += 0.2f; break;
case 'e':
  depth -= 0.2f; break;
case 'z': 
  angle += 0.2f; break;
case 'c':
  angle -= 0.2f; break;
}
}`

尽管如此,我知道这还不够。如果我想要进行更改,我必须添加glutPostRedisplay() - 但在哪里?我是否必须在上述代码中的每次“休息”之前提出它?我试图将它添加到glutTimerFunc回调和glutIdleFunc回调,但对象在击键后继续移动。

1 个答案:

答案 0 :(得分:1)

是的,您可以在每次休息后添加它。但你也可以将它添加到函数的最底层。

如果将其添加到glutIdleFunc回调中,即使没有更改,也会重新绘制屏幕。这不应该导致任何问题。

我不明白为什么你的物体继续前进。也许你忘了在glutDisplayFunc回调中用glLoadIdentity ();重置模型视图矩阵。