2011-01-05 8 views
2

필자가 지난 몇 개의 프로젝트에서 몇 가지 데모를 보면서 발견 한 유틸리티 파일 중 일부를 사용했습니다 here.OpenGL 깊이 버퍼 문제

즉, 주로 glew와 gl_font와 같은 셰이더를 관리하는 데 사용되는 opengl.h 파일입니다.

gl_font는 정점 버퍼 객체를 사용하여 화면에 글꼴을 렌더링하는 데 사용하는 클래스입니다.

그러나이 게임을 사용하여 내 게임에서 프레임 속도를 렌더링 할 때 skybox를 제외한 모든 것을 정확하게 그립니다. 어떤 이유로 폰트가 here 인 것처럼 하늘 상자가 흰색으로 렌더링됩니다. 폰트를 렌더링하지 않으면 this처럼 보입니다. 여기

내가 가장 중요하다 생각 gl_font 클래스의 일부이다 : 나는 트라이 glPushAttrib에 glPushAttrib(GL_CURRENT_BIT | GL_LIGHTING_BIT); 변경 한

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

(| GL_LIGHTING_BIT | GL_CURRENT_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) 다음에 begin()에는 glPushMatrix()이 없습니다. 일부 텍스트도 렌더링 될 때 장면이 잘못 렌더링 될 수 있습니다.

glGetError()GL_STACK_UNDERFLOW을 신고 했습니까?

+0

텍스트를 마지막으로 렌더링하므로 푸시 매트릭스가 중요하지 않아야합니까? – henryprescott

+0

하나님은 Direct3D를 축복하셨습니다. – Puppy

+0

프레임 당 처음부터 modelview를 생성하는 경우에 따라 다릅니다. 어쨌든 :'GL_LIGHTING_BIT'도'glPopMatrix'에 있고 마지막으로 텍스트를 그리면 깊이 테스트를 통과 했습니까? 텍스트를 렌더링하는 동안 GL_DEPTH_TEST를 사용하지 않으려 고 시도 했습니까? – Kos

관련 문제