为什么我的HUD不能在OpenGL中渲染?

时间:2012-07-10 03:53:46

标签: 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;
}

提前感谢您提供的任何帮助,我知道我很绿,我确信它正在盯着我,但这让我很生气,我不知道如何制作它工作

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:0)

它可能会在您的z剪辑内打印,因此它不会显示在您的屏幕上。所以,稍稍离开屏幕,看看它是否显示出来。