2011-01-05 11 views
2

私の最後のいくつかのプロジェクトでは、いくつかのデモを見ている間に発見されたユーティリティファイルのいくつかを使用していましたhereOpenGLデプスバッファ問題

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

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

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

ここ

は、私が最も重要だと思う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にglPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT);を変更している(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(); 
} 

Thisは、フォントがレンダリングされるときにデプスバッファの画像であり、thisはそれがないときにどのように見えるかです。

誰でもこの問題を軽視してください。

ご協力いただければ幸いです。

ありがとうございました。

答えて

1

glMatrixMode(GL_MODELVIEW)の後には、のように見えません。これにより、テキストがレンダリングされたときにシーンが正しくレンダリングされないことがあります。

glGetError()GL_STACK_UNDERFLOWエラーが報告されましたか?

+0

私はテキストを最後にレンダリングしているので、プッシュマトリックスは問題ではありませんか? – henryprescott

+0

神はDirect3Dを祝福します。 – Puppy

+0

フレームごとにモデルビューを最初から作成するかどうかによって異なります。とにかく: 'GL_LIGHTING_BIT'を' glPopMatrix'にも含めて、最後にテキストを描画すると、それはデプステストに合格していますか?あなたはテキストのレンダリングのためにGL_DEPTH_TESTを無効にしようとしましたか? – Kos