2

最近のいくつかのプロジェクトでは、ここでいくつかのデモを見ながら見つけたいくつかのユーティリティ ファイルを使用しています。

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

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

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

私が最も重要だと思う 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();
}

これは、フォントがレンダリングされたときの深度バッファーのイメージであり、レンダリングされいないときの外観です。

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

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

ありがとう。

4

1 に答える 1

1

afterbegin()がないように見えます。これにより、一部のテキストもレンダリングされると、シーンが正しくレンダリングされない可能性があります。glPushMatrix()glMatrixMode(GL_MODELVIEW)

エラーをglGetError()報告しませんでしたか?GL_STACK_UNDERFLOW

于 2011-01-05T18:45:46.867 に答える