繁体   English   中英

OpenGL深度缓冲区问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM