C++ openGL中正确混合的问题

C++ openGL中正确混合的问题,c++,opengl,sdl,blending,C++,Opengl,Sdl,Blending,我试图在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.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

}
我应该如何设置它才能正常工作(例如,绘制精灵时身后没有奇怪的东西)

这就是我所说的:


PS:我需要能够将透明/半透明图像放在彼此的顶部,并使它们后面的内容也可见。

您的精灵是否具有预乘alpha?您的
glBlendFunc
设置有点不寻常,如果您没有预乘alpha,则肯定会导致问题。

您的精灵是否具有预乘alphatiplied alpha?您的
glBlendFunc
设置有点不正常,如果您没有预乘alpha,它肯定会导致问题。

您通常不应该“设置”OpenGL。在InitGL中设置的所有状态都应该在显示功能中根据需要进行设置。在OpenGL中只有很少的一次初始化,即纹理和缓冲区对象。一旦你意识到这一事实,你就可以随时启用/禁用混合,并且应该根据当前阶段的需要进行在渲染场景时,这会变得容易得多。通常不应“设置”OpenGL。在InitGL中设置的所有状态都应该在显示功能中根据需要进行设置。在OpenGL中只有很少的一次初始化,即纹理和缓冲区对象。一旦你意识到这一事实,你就可以随时启用/禁用混合,并且应该根据当前阶段的需要进行在渲染场景时,这会变得容易得多。