2012-07-10 99 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