【问题标题】:Why is my HUD not rendering in OpenGL?为什么我的 HUD 没有在 OpenGL 中渲染?
【发布时间】:2012-07-09 12:27:29
【问题描述】:

我是 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;
}

提前感谢您提供的任何帮助,我知道我很年轻,我确定它正盯着我的脸,但这让我发疯,我不知道如何做到这一点工作。

【问题讨论】:

    标签: c++ opengl rendering hud


    【解决方案1】:

    在场景的其余部分之后使用glLoadHud,您的MODELVIEW 矩阵仍在堆栈中,并且您没有将其作为glLoadHud 的一部分清除。因此,当您绘制 hud 时,您在场景中积累的所有 glTranslatef 翻译仍然处于活动状态,这会将其翻译出您的可视窗口。

    清除MODELVIEW 矩阵作为glLoadHud 开头的一部分,看看是否有区别。

    【讨论】:

    • 就是这样!非常感谢。现在我终于可以不用扯头发了。
    【解决方案2】:

    它可能会打印在您的 z 剪辑中,因此不会显示在您的屏幕上。所以,稍微移出屏幕,看看它是否出现。

    【讨论】:

    • 试过了,但事实并非如此。我认为当我也提前渲染 HUD 时,这会影响它,这是可悲的不起作用的地方。但谢谢!绝对值得记住的事情,我相信这迟早会绊倒我。
    • 再想一想,你实际上是在那儿的东西上,最初的翻译影响了它,所以它也将 12.0f 渲染到屏幕上。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-07-10
    • 2021-12-07
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多