对于我的最后几个项目,我一直在查看一些演示时发现的一些实用程序文件 这里.

即,一个称为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 错误?

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top