2

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

预先感谢您提供的任何帮助,我知道我很年轻,我确信它正盯着我的脸,但这让我发疯,我不知道如何让它发挥作用。

4

2 回答 2

2

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

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

于 2012-07-10T05:41:23.690 回答
0

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

于 2012-07-10T03:58:20.253 回答