OpenGL深度缓冲区问题
问题描述:
对于我最近的几个项目,我一直在使用我发现的一些实用程序文件,同时查看一些演示here。OpenGL深度缓冲区问题
即一个名为opengl.h的文件 - 主要用于管理着色器有点像glew和另一个文件gl_font。
gl_font是一个类,它们用于使用顶点缓冲区对象在屏幕上呈现字体。
但是,当我使用它在我的游戏中渲染帧率时,它会正确绘制天空盒中的所有物体。由于某些原因,天空盒呈现白色,如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(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();
}
This是深度缓冲的图像时的字体渲染和this是什么样子时,它不是。
请问谁能解释一下这个问题?
任何帮助将不胜感激!
谢谢。
答
看起来像begin()
在glMatrixMode(GL_MODELVIEW)
之后缺少glPushMatrix()
。这可能会导致场景在渲染某些文本时呈现错误。
没有glGetError()
举报GL_STACK_UNDERFLOW
错误?
我最后呈现文本,所以pushmatrix应该不重要吗? – henryprescott 2011-01-05 18:48:43
上帝保佑Direct3D。 – Puppy 2011-01-05 18:53:56
取决于您是否从头开始创建模型视图。无论如何:如果'glPopMatrix'中还有'GL_LIGHTING_BIT',并且最后绘制文本,您确定它通过了深度测试吗?您是否尝试在呈现文本的时候禁用GL_DEPTH_TEST? – Kos 2011-01-05 18:59:16