0

2D タイルマップの上に 2D キャラクター スプライトを描画しようとしていますが、キャラクターを描画すると背後に奇妙なものがあります。これはスプライトにはないので、ブレンドだと思います。

これが私のopenGLのセットアップ方法です:

void InitGL(int Width, int Height)          // We call this right after our OpenGL window is created.
{

    glViewport(0, 0, Width, Height);
    glClearColor(0.0f, 0.0f, 0.0f, 0.0f);       // This Will Clear The Background Color To Black
    glClearDepth(1.0);              // Enables Clearing Of The Depth Buffer
    glDepthFunc(GL_LESS);               // The Type Of Depth Test To Do
    glDisable(GL_DEPTH_TEST);           // Enables Depth Testing
    //glShadeModel(GL_SMOOTH);          // Enables Smooth Color Shading
    glEnable(GL_TEXTURE_2D);                        // Enable Texture Mapping ( NEW )
    glShadeModel(GL_FLAT);
    glMatrixMode(GL_PROJECTION);
    glEnable(GL_BLEND);
    glBlendFunc(GL_ONE , GL_ONE_MINUS_SRC_ALPHA);
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
    glAlphaFunc(GL_GREATER, 0.5f);

    glMatrixMode(GL_PROJECTION);//configuring projection matrix now
    glLoadIdentity();//reset matrix
    glOrtho(0, Width, 0, Height, 0.0f, 100.0f);//set a 2d projection matrix

}

これを適切に機能させるにはどうすればよいですか (つまり、スプライトの後ろに奇妙なものを置かずに描画します)。

これは私が話していることです: http://i.stack.imgur.com/cmotJ.png

PS: 透明/半透明の画像を重ねて配置し、その背後にあるものも表示できるようにする必要があります

4

1 に答える 1

3

あなたのスプライトは事前乗算されたアルファを持っていますか? あなたのglBlendFuncセットアップは少し変わっています.プリマルチプライされたアルファがない場合は、間違いなく問題を引き起こしている可能性があります.

于 2011-04-12T00:43:44.950 に答える