OpenGL深度缓冲区问题
-
25-09-2019 - |
题
对于我的最后几个项目,我一直在查看一些演示时发现的一些实用程序文件 这里.
即,一个称为OpenGl.H的文件 - 主要用于管理着glew和另一个文件GL_FONT的阴暗器。
GL_FONT是他们使用顶点缓冲区对象在屏幕上渲染字体的类。
但是,当我使用它来渲染游戏中的帧速率时,它会正确地绘制Skybox以外的所有内容。由于某种原因,Skybox被呈现为白色 这里, ,如果我不渲染字体,看起来像 这个.
这是我认为最重要的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();
}
这个 是渲染字体时深度缓冲区的图像 这个 是当不在时的样子。
有人可以阐明这个问题吗?
任何帮助将非常感激!
谢谢。
解决方案
好像 begin()
缺乏 glPushMatrix()
后 glMatrixMode(GL_MODELVIEW)
. 。这可能会导致场景被错误地渲染时,当一些文本也被渲染时。
没有 glGetError()
报告 GL_STACK_UNDERFLOW
错误?
不隶属于 StackOverflow