[英]OpenGL Depth Buffer Problem
对于我的最后几个项目,我一直在使用一些实用文件,这些实用文件是在查看此处的一些演示时找到的 。
即一个名为opengl.h的文件-主要用于管理着色器,例如glew和另一个文件gl_font。
gl_font是一个类,它们用于使用顶点缓冲区对象在屏幕上呈现字体。
但是,当我使用它渲染游戏中的帧率时,它将正确绘制除天空盒以外的所有内容。 出于某种原因,空中包厢呈现白色所看到这里 ,如果我不使它看起来像字体这样 。
这是我认为最重要的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()
在glMatrixMode(GL_MODELVIEW)
之后缺少glPushMatrix()
glMatrixMode(GL_MODELVIEW)
。 当还渲染某些文本时,这可能会导致场景渲染不正确。
glGetError()
是否没有报告GL_STACK_UNDERFLOW
错误?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.