【问题标题】:keyboard event in OpenGL with glutOpenGL中的键盘事件与过剩
【发布时间】:2011-07-30 03:15:56
【问题描述】:

我正在使用 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 回调中,但对象在击键后继续移动。

【问题讨论】:

    标签: opengl glut


    【解决方案1】:

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

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

    我不明白为什么你的物体一直在移动。也许您忘记在 glutDisplayFunc 回调中使用 glLoadIdentity (); 重置模型视图矩阵。

    【讨论】:

    • 是的,我不小心把它漏掉了。不用费心使用 glutIdleFunc 或 glutTimerFunc。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多