Problema de buffer de profundidade OpenGL
-
25-09-2019 - |
Pergunta
Para meus últimos projetos, tenho usado alguns dos arquivos de utilitário que encontrei enquanto olham para algumas demos aqui.
Nomeadamente, um arquivo chamado OpenGL.H - usado principalmente para gerenciar shaders um pouco como Glew e outro arquivo gl_font.
GL_FONT é uma classe que eles usam para renderizar fontes na tela usando objetos de buffer de vértice.
No entanto, quando eu uso isso para renderizar a taxa de quadros no meu jogo, ele desenha tudo, exceto o Skybox corretamente. Por algum motivo, o Skybox é tornado branco como visto aqui, se eu não renderizar a fonte, parece isto.
Aqui estão algumas partes da classe GL_FONT que eu acho mais importantes:
void GLFont::begin()
{
HWND hWnd = GetForegroundWindow();
RECT rcClient;
GetClientRect(hWnd, &rcClient);
int w = rcClient.right - rcClient.left;
int h = rcClient.bottom - rcClient.top;
glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
glDisable(GL_LIGHTING);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, m_fontTexture);
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
glOrtho(0.0f, w, h, 0.0f, -1.0f, 1.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glBindBuffer(GL_ARRAY_BUFFER, m_vertexBuffer);
drawTextBegin();
}
Eu tenho mudanças de trie glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);
para glpushattrib (gl_current_bit | gl_lighting_bit | gl_texture_bit); E a textura de fundo retorna, mas a fonte não é renderizada.
void GLFont::end()
{
drawTextEnd();
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindTexture(GL_TEXTURE_2D, 0);
glDisable(GL_TEXTURE_2D);
glDisable(GL_BLEND);
glMatrixMode(GL_PROJECTION);
glPopMatrix();
glMatrixMode(GL_MODELVIEW);
glPopMatrix();
glPopAttrib();
}
este é uma imagem do buffer de profundidade quando a fonte é renderizada e isto é o que parece quando não é.
Alguém poderia esclarecer esse problema, por favor?
Qualquer ajuda seria muito apreciada!
Obrigado.
Solução
Parece begin()
falta um glPushMatrix()
depois glMatrixMode(GL_MODELVIEW)
. Isso pode fazer com que a cena seja renderizada incorretamente quando algum texto também é renderizado.
Não glGetError()
Relatório a GL_STACK_UNDERFLOW
erro?