проблема с правильным смешиванием в openGL

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


person CyanPrime    schedule 12.04.2011    source источник
comment
Обычно вам не следует настраивать OpenGL. Все состояния, которые вы устанавливаете в InitGL, должны быть установлены по мере необходимости в функции отображения. Лишь очень немногое из того, что инициализируется один раз в OpenGL, а именно текстуры и объекты буфера. Как только вы осознали тот факт, что вы можете включить/отключить смешивание в любое время и должны делать это в зависимости от потребностей текущего этапа рендеринга сцены, все становится намного проще.   -  person datenwolf    schedule 12.04.2011


Ответы (1)


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

person Ben Voigt    schedule 12.04.2011