필자가 지난 몇 개의 프로젝트에서 몇 가지 데모를 보면서 발견 한 유틸리티 파일 중 일부를 사용했습니다 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은 없을 때의 모습이다.
누구든지이 문제에 대해 알려주시겠습니까?
도움이 될 것입니다.
감사합니다.
텍스트를 마지막으로 렌더링하므로 푸시 매트릭스가 중요하지 않아야합니까? – henryprescott
하나님은 Direct3D를 축복하셨습니다. – Puppy
프레임 당 처음부터 modelview를 생성하는 경우에 따라 다릅니다. 어쨌든 :'GL_LIGHTING_BIT'도'glPopMatrix'에 있고 마지막으로 텍스트를 그리면 깊이 테스트를 통과 했습니까? 텍스트를 렌더링하는 동안 GL_DEPTH_TEST를 사용하지 않으려 고 시도 했습니까? – Kos