OpenGL / GLUT 更改 glutMainLoop() 内的回调

OpenGL / GLUT change callbacks inside glutMainLoop()

通常 GLUT 应用程序将按以下模式构建:

我只能访问主循环中的绘图回调函数。 我将无法更改初始化部分。 有没有办法在这个循环中改变像 glutKeyboardFunc() 这样的回调函数?或者有没有其他方法可以在不访问初始化部分的情况下捕获键盘输入?

谢谢

是的,您可以随时致电 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 回调,因此您可以随时切换显示、空闲等回调。例如,你想显示一个加载屏幕,那么将显示回调切换到加载屏幕显示函数是非常有意义的,一旦加载完成就切换到场景渲染函数。