在glutMainLoop()中改变OpenGL / GLUT回调

时间:2016-08-02 08:03:40

标签: opengl callback glut

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

  • 一些初始化的东西
  • glutMainLoop()

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

由于

1 个答案:

答案 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回调,因此您可以随时切换显示,空闲等回调。例如,假设你要显示一个加载屏幕,那么将显示回调切换到加载屏幕显示功能是完全合理的,一旦加载完成就改为场景渲染功能。