0

我在我正在创建的 opengl 游戏中发现了一个困难。我有一个 camara 类,其中的代码应该都可以工作。IE

void keyboard (unsigned char key, int x, int y) {

    keyStates[key] = false;

    if (key=='q')
    {
    xrot += 1;
    if (xrot >360) xrot -= 360;
    }

    if (key=='z')
    {
    xrot -= 1;
    if (xrot < -360) xrot += 360;
    }
etc..

}

但是,当我尝试将其放入我的 main() 中时,它会引发异常处理错误。我的主要代码是:

int main(int argc,char** argv)
{

    SDL_Init(SDL_INIT_EVERYTHING);
    SDL_Surface* screen=SDL_SetVideoMode(640,480,32,SDL_SWSURFACE|SDL_OPENGL);
    bool running=true;
    Uint32 start;
    SDL_Event event;
    init();
    glutKeyboardFunc(keyboard);

    while(running)
    {

        start=SDL_GetTicks();


        while(SDL_PollEvent(&event))
        {
            switch(event.type)
            {

                case SDL_QUIT:
                    running=false;
                    break;
            }
        }

        display();

        SDL_GL_SwapBuffers();
        angle+=0.0;
        if(angle>360)
            angle-=360;
        if(1000/30>(SDL_GetTicks()-start))
            SDL_Delay(1000/30-(SDL_GetTicks()-start));  
    }

    SDL_Quit();

    return 0;   

}

抱歉,如果我的代码不清楚,我已将搅拌机集成到 opengl 中。

4

1 回答 1

1

首先,为什么要同时使用 GLUT 和 SDL?SDL 提供了 GLUT 提供的所有功能,但通常更好。您可以使用 SDL 提供的事件队列进行输入,而不是使用 GLUT 的键盘功能。

其次,我很确定尝试使用任何 GLUT 函数而不调用 glutInit(argc, argv) 会导致它硬关闭程序。查看一些文档,似乎确实如此。尝试删除它,并扩展您的 SDL 事件案例以处理键盘输入。是一个小而简单的例子。

于 2013-01-08T03:57:24.313 回答