0

作成中の OpenGL ゲームで問題が発生しました。すべてが機能するはずのコードを含むcamaraクラスがあります。すなわち

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 が提供するすべての機能を提供しますが、一般的にはより優れています。GLUT のキーボード機能ではなく、SDL が入力用に提供するイベント キューを使用できます。

第 2 に、glutInit(argc, argv) を呼び出さずに GLUT 関数を使用しようとすると、プログラムがハード シャットダウンされると確信しています。いくつかのドキュメントを見ると、それは間違いないようです。それを削除してみて、キーボード入力を処理するように SDL イベント ケースを拡張してください。これを行うための小さくて簡単な例を次に示します

于 2013-01-08T03:57:24.313 に答える