我是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;
}
提前感谢您提供的任何帮助,我知道我很绿,我确信它正在盯着我,但这让我很生气,我不知道如何制作它工作
答案 0 :(得分:2)
在场景的其余部分之后使用glLoadHud
,您的MODELVIEW
矩阵仍在堆栈中,并且您不会将其作为glLoadHud
的一部分清除。因此,当您绘制hud时,您在场景中累积的所有glTranslatef
翻译仍处于活动状态,这会将其平移到您的可视窗口之外。
清除MODELVIEW
矩阵作为glLoadHud
开头的一部分,看看是否有所作为。
答案 1 :(得分:0)
它可能会在您的z剪辑内打印,因此它不会显示在您的屏幕上。所以,稍稍离开屏幕,看看它是否显示出来。