回调处理键盘输入

时间:2012-07-15 12:15:46

标签: c++ opengl callback keyboard glut

我刚刚开始学习OpenGL / Glut,我遇到了一些问题。我想点击密钥key: a时打印字符串a,但似乎我不知道我在做什么。

我正在从glutKeyboardFunc()函数调用main(),我正在传递keyinput(),它会测试keyESC还是{{} 1}}。另一件事是,当我尝试从a内部打印时,它的效果非常好!嗯奇怪为什么?

scene1()

1 个答案:

答案 0 :(得分:1)

这可能是因为GLUT在渲染代码之外调用keyinput()。

我假设您的绘图函数(glutDisplayFunc或glutIdleFunc)首先调用glClear()并以调用glutSwapBuffers()结束?如果是这样,那么在调用glClear()之前,将在keyinput()内部进行任何绘制调用,因此不会看到绘图。

最重要的是,不会连续调用keyinput。按下您的键时会调用它。所以你的文字只会在一瞬间显示,而不是一直显示。

我建议你制作一个全局变量,

int aIsPressed=0;

在keyinput中,将aIsPressed设置为您希望显示消息的帧数(如果您限制帧速率,请尝试60,如果不是,请尝试1000)

然后,在您的绘图功能中,与您的代码一起执行此操作以绘制其他所有内容:

if(aIsPressed>0)
{ 
    glLoadIdentity();
    glColor3f(0.0f, 1.0f, 0.0f);    // Green
    printstr(GLUT_BITMAP_8_BY_13, "Key: a", 0.0f, 0.9f, 0.0f);
    aIsPressed--; //this way aIsPressed will count down to zero, and the message will disappear again
}