Frage

Für meine letzten Projekte habe ich einige der Dienstprogrammdateien verwendet, die ich beim Betrachten einiger Demos gefunden habe hier.

Nämlich eine Datei namens OpenGl.h - hauptsächlich zum Verwalten von Shadern wie Glew und einer anderen Datei GL_FONT.

GL_FONT ist eine Klasse, mit der sie mithilfe von Vertex -Pufferobjekten Schriftarten auf dem Bildschirm rendern.

Wenn ich dies jedoch benutze, um die Framerate in meinem Spiel zu rendern, zeichnet es alles außer der Skybox richtig. Aus irgendeinem Grund wird die Skybox wie gesehen weiß gerendert hier, Wenn ich die Schrift nicht mache, sieht es so aus Dies.

Hier sind einige Teile der GL_FONT -Klasse, die meiner Meinung nach am wichtigsten sind:

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();
}

Ich habe Trieswechsel glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); an glpushAttrib (GL_Current_bit | gl_Lighting_bit | gl_texture_bit); Und die Hintergrundstruktur kehrt zurück, aber die Schrift wird nicht gerendert.

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();
}

Dies ist ein Bild des Tiefenpuffers, wenn die Schriftart gerendert wird und Dies Ist das, was aussieht, wenn es nicht ist.

Könnte jemand bitte ein Licht in dieses Problem werfen?

Jede Hilfe wäre sehr geschätzt!

Vielen Dank.

War es hilfreich?

Lösung

Sieht aus wie begin() fehlt a glPushMatrix() nach glMatrixMode(GL_MODELVIEW). Dies kann dazu führen, dass die Szene falsch gerendert wird, wenn auch ein Text wiedergegeben wird.

Nicht glGetError() Bericht a GL_STACK_UNDERFLOW Error?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top