проблема правильного смешивания в OpenGL

#c #opengl #sdl #blending

#c #opengl #sdl #смешивание

Вопрос:

Я пытаюсь нарисовать 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: Мне нужно иметь возможность накладывать прозрачные / полупрозрачные изображения друг на друга, чтобы было видно и то, что за ними

Комментарии:

1. Обычно вам не следует «настраивать» OpenGL. Все состояния, которые вы устанавливаете в InitGL, должны быть установлены по мере необходимости в функции отображения. В OpenGL очень мало того, что инициализируется один раз, а именно текстуры и объекты буфера. Как только вы осознаете тот факт, что вы можете включить / отключить смешивание в любое время и должны делать это в зависимости от потребностей текущего этапа рендеринга сцены, все становится намного проще.

Ответ №1:

Имеет ли ваш спрайт предварительно умноженную альфа-версию? Ваша glBlendFunc настройка немного необычна, если у вас нет предварительно умноженной альфа-версии, это определенно может быть причиной проблемы.