OpenGL深度缓冲区问题
在我最近的几个项目中,我一直在使用我在查看一些演示时发现的一些实用程序文件 即一个名为opengl.h的文件-主要用于管理着色器,有点像glew和另一个文件Glu字体 gl_字体是一个类,他们使用顶点缓冲区对象在屏幕上渲染字体 但是,当我在游戏中使用这个来渲染帧率时,它会正确地绘制除skybox之外的所有内容。由于某些原因,如果我不渲染它看起来像的字体,skybox将呈现为白色 以下是我认为最重要的gl_字体类的一些部分:OpenGL深度缓冲区问题,opengl,graphics,depth-buffer,vertex-buffer,Opengl,Graphics,Depth Buffer,Vertex Buffer,在我最近的几个项目中,我一直在使用我在查看一些演示时发现的一些实用程序文件 即一个名为opengl.h的文件-主要用于管理着色器,有点像glew和另一个文件Glu字体 gl_字体是一个类,他们使用顶点缓冲区对象在屏幕上渲染字体 但是,当我在游戏中使用这个来渲染帧率时,它会正确地绘制除skybox之外的所有内容。由于某些原因,如果我不渲染它看起来像的字体,skybox将呈现为白色 以下是我认为最重要的gl_字体类的一些部分: void GLFont::begin() { HWND hWnd
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_当前位| GL_照明位)编码>到glPushAttrib(GL_当前_位| GL_照明_位| GL_纹理_位);背景纹理将返回,但字体不会渲染
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();
}
是渲染字体时深度缓冲区的图像,是不渲染字体时的外观
谁能解释一下这个问题吗
任何帮助都将不胜感激
谢谢。看起来begin()
在glMatrixMode(GL\u MODELVIEW)
之后缺少glPushMatrix()
。这可能会导致在渲染某些文本时场景渲染不正确
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();
}
没有glGetError()
报告GL\u STACK\u UNDERFLOW
错误?我正在最后渲染文本,所以pushmatrix应该无关紧要,是吗?取决于您是否从头开始每帧创建modelview。无论如何:如果您的GL\u LIGHTING\u BIT
也出现在glPopMatrix
中,并且您最后绘制了文本,您确定它通过了深度测试吗?您是否尝试在呈现文本时禁用GL_DEPTH_测试?@DeadMG。他们已经在最近的API中清除了这些混乱,在GL 3和GL 4中没有什么可抱怨的。。。我猜:)@DeadMG,而且那些顽固的CAD软件工程师使用OpenGL真是太糟糕了,尽管OpenGL很可怕!(为什么我们要继续这场圣战…?我们这里有一个问题要回答!)@Kos:这不是关于OGL vs D3D,而是关于PushMatrix的想法很糟糕,根本不应该被考虑。