我刚刚开始学习OpenGL / Glut,我遇到了一些问题。我想点击密钥key: a
时打印字符串a
,但似乎我不知道我在做什么。
我正在从glutKeyboardFunc()
函数调用main()
,我正在传递keyinput()
,它会测试key
是ESC
还是{{} 1}}。另一件事是,当我尝试从a
内部打印时,它的效果非常好!嗯奇怪为什么?
scene1()
答案 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
}