質問

最後のいくつかのプロジェクトでは、いくつかのデモを見ている間に見つけたユーティリティファイルのいくつかを使用しています ここ.

つまり、opengl.hというファイル - 主にGlewや別のファイルGl_fontのようなシェーダーを管理するために使用されます。

GL_FONTは、Vertexバッファオブジェクトを使用して画面上のフォントをレンダリングするために使用するクラスです。

ただし、これを使用してゲームでフレームレートをレンダリングすると、スカイボックス以外のすべてが正しく描画されます。何らかの理由で、スカイボックスは見たように白にレンダリングされます ここ, 、私がフォントをレンダリングしなければ、それは これ.

ここに、GL_FONTクラスの一部が最も重要だと思います。

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

私はトライを変えています glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); glpushattrib(gl_current_bit | gl_lighting_bit | gl_texture_bit);背景のテクスチャは戻りますが、フォントはレンダリングされません。

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

これ フォントがレンダリングされたときの深さバッファの画像であり、 これ そうでないときのように見えるものです。

誰かがこの問題に光を当てることができますか?

どんな助けも大歓迎です!

ありがとう。

役に立ちましたか?

解決

ように見えます begin() 欠けている glPushMatrix()glMatrixMode(GL_MODELVIEW). 。これにより、テキストもレンダリングされたときにシーンが誤ってレンダリングされる可能性があります。

しなかった glGetError() 報告a GL_STACK_UNDERFLOW エラー?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top