2012-07-10 94 views
2

我是OpenGL的新手,我一直在浏览NeHe的教程和其他各种网络资源,我正在测试一些东西来将文本呈现为各种其他类型的HUD。 经过漫长的一夜之后,我无法让这个工作,我在这里找不到任何解决方案,所以我想我会问。为什么我的HUD不能在OpenGL中渲染?

我的代码:

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

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

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

+0

就是这样! 非常感谢。现在,我终于可以在没有任何头发的情况下移动过去。 – 2012-07-10 05:50:30

0

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

+0

试过,但事实并非如此。我认为这会影响它,当我提交HUD之前,这也是无法令人伤心的。 但谢谢你!绝对值得记住的东西,我相信迟早会让我trip trip不安。 – 2012-07-10 05:49:50

+0

第二个想法,你实际上是在那里,最初的翻译影响了它,所以它也在屏幕上呈现12.0f。 – 2012-07-10 08:21:24