我正在使用过滤库对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回调,但对象在击键后继续移动。
答案 0 :(得分:1)
是的,您可以在每次休息后添加它。但你也可以将它添加到函数的最底层。
如果将其添加到glutIdleFunc回调中,即使没有更改,也会重新绘制屏幕。这不应该导致任何问题。
我不明白为什么你的物体继续前进。也许你忘了在glutDisplayFunc回调中用glLoadIdentity ();
重置模型视图矩阵。