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.

Foi útil?

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?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top