c++ - 为什么我的 HUD 未在 OpenGL 中渲染?

标签 c++ opengl rendering hud

我是 OpenGL 新手,我一直在浏览 NeHe 的教程和各种其他网络资源,并且我正在测试一些东西来将文本渲染为某种 HUD。 经过漫长的一夜后,我无法让它发挥作用,而且我在这里找不到任何有效的解决方案,所以我想我应该问一下。

我的代码:

GLvoid glLoadHUD(GLvoid)
{
    glPushAttrib(GL_LIGHTING_BIT |
                    GL_DEPTH_BUFFER_BIT |
                    GL_TEXTURE_BIT);

    glDisable(GL_LIGHTING);
    glDisable(GL_DEPTH_TEST);
    glDisable(GL_TEXTURE_2D);

    glMatrixMode(GL_PROJECTION);
        glPushMatrix();
            glLoadIdentity();
            glOrtho(0.0f, 1.0f, 0.0f, 1.0f, -1.0f, 1.0f);
            glRasterPos2f(0.1f, 0.6f);
            glColor3f(1.0f,1.0f,1.0f);
            glPrint("Test.");
            glRasterPos2f(0.0f, 0.0f);
        glPopMatrix();
    glMatrixMode(GL_MODELVIEW);
    glPopAttrib();

    glEnable(GL_TEXTURE_2D);
    glEnable(GL_LIGHTING);  
    glEnable(GL_DEPTH_TEST);
}    

这是渲染文本的代码,这是绘制场景的代码:

int DrawGLScene(GLvoid)                                         
{

glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clears buffers
glLoadIdentity();

// If I put glLoadHUD(); here, it renders but the models render over it,
    //  which is useless.

for (xloop = 0; xloop < 3;)
{
    glLoadIdentity();
    glTranslatef(-4.0f+(float(xloop)*4.0f),0.0f,-12.0f);
    glCallList(dlstBox);    // This is the call to create a box.
    xloop++;
}


glLoadHUD();  // If I put it here though, it doesn't render at all.

return TRUE;
}

提前感谢您提供的任何帮助,我知道我很新手,我确信它就在我面前,但这让我发疯,我不知道如何做到这一点工作。

最佳答案

glLoadHud在场景的其余部分之后,您的 MODELVIEW矩阵仍在堆栈上,并且您没有将其清除为 glLoadHud 的一部分。因此所有的glTranslatef当您绘制HUD时,您在场景中积累的翻译仍然处于事件状态,HUD会将其直接翻译出您的可 window 口。

清除MODELVIEW矩阵作为 glLoadHud 开头的一部分看看这是否会产生影响。

关于c++ - 为什么我的 HUD 未在 OpenGL 中渲染?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11406361/

相关文章:

c++ - 如何使用 tinyxml2 解析空元素?

c++ - OpenGL - 从 Matrix 4x4 本地向上和向右?

php - 如何向多个渲染的 URL 添加参数?

Java - 在 Graphics2D 中获取新的旋转点

algorithm - 在不使用范围值的情况下渲染温度图

c++ - 查找要删除重复项的项目

c++ - ZMQ - 客户端服务器 : Client is powered off unexpectedly, 服务器如何检测到它?

c++ - 如何在 qt main() 中运行 post 请求

python - 如何在 MacOS 上使用 QGLFormat 更改 OpenGL 版本?

opengl - 计算着色器写入纹理