#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
настройка немного необычна, если у вас нет предварительно умноженной альфа-версии, это определенно может быть причиной проблемы.