通常,GLUT应用程序将按以下模式构建:
glutMainLoop()
我只能访问主循环内的绘图回调函数。
我将无法更改初始化部分。
有没有办法在这个循环中更改像glutKeyboardFunc()
这样的回调函数?或者是否有其他方法可以捕获键盘输入而无需访问初始化部分?
由于
答案 0 :(得分:1)
是的,您可以随时拨打glut…Func
。例如,你可能需要键盘处理函数并在它们之间切换(上下文键)
void keyfunc_edit(unsigned char key, int x, int y);
void keyfunc_select(unsigned char key, int x, int y);
void keyfunc_edit(unsigned char key, int x, int y)
{
switch( key ){
case 'x':
case 'X':
/* switch to select mode */
glutKeyboardFunc(keyfunc_select);
break;
}
void keyfunc_select(unsigned char key, int x, int y)
{
switch( key ){
case 'e':
case 'E':
/* switch to edit mode */
glutKeyboardFunc(keyfunc_edit);
break;
}
这适用于任何 GLUT回调,因此您可以随时切换显示,空闲等回调。例如,假设你要显示一个加载屏幕,那么将显示回调切换到加载屏幕显示功能是完全合理的,一旦加载完成就改为场景渲染功能。