在OpenGL的3D世界中,在固定位置绘制2D文本

4
我正在使用C++创建一个非常简单的OpenGL游戏,其中一个3D模型在3D世界中移动。我必须在屏幕上放置一些2D文本:相机不断地跟随模型,我希望文本以固定位置显示在窗口上。
我尝试使用来自Nehe的教程,但在那种情况下,gluLookAt处于固定位置(从“高处”向下看世界),因此文本显然被正确显示。
不幸的是,我没有通过glRotatef/glTranslatef实现我想要的效果。
有人能帮我吗?如何在相机移动时显示固定位置的文本? 我已经在其他线程中寻找解决方案,但在没有一个合适的解决方案(特别是利用glut功能的解决方案,在我的情况下似乎都不起作用)。
我还预先说明,我已经按照我遵循的Nehe教程中所述实现了构建/删除字体等所有函数。
编辑: 我附上我刚刚编写的代码。不幸的是它不起作用,但我不明白为什么(实际上我也不明白光栅位置的工作原理)。
...
//Here I draw the rest of the scene
....
//now I try to display the text
glMatrixMode(GL_PROJECTION);
glPushMatrix();
glLoadIdentity();
gluOrtho2D(0.0, width, 0.0, height);
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glRasterPos2i(100, 100);
glPrint("SAMPLE TEXT");
glPopMatrix();
glMatrixMode(GL_PROJECTION);
glPopMatrix();

1
你可以使用不同的视图矩阵来渲染文本。首先按照现在的方式绘制场景,然后更改矩阵为正交投影和适当的视图矩阵,并绘制文本。 - BDL
谢谢您的回答。我刚刚更新了我的问题,并附上了我编写的代码,但它没有起作用。 - user4706825
1个回答

2
最简单的方法是使用glWindowPos()而不是glRasterPos()来设置当前的光栅位置。glWindowPos()允许您在窗口坐标中指定位置,以像素为单位。
例如,将位置设置为(100, 100),并且原点位于左下角:
glWindowPos2i(100, 100);

当前的转换对此调用没有影响。

这可能是我的问题的解决方案,但由于微软从1.2开始缺少对OpenGL的支持,我无法直接利用它。我寻找了一些解决方案,比如这个讨论的最后一个帖子(http://www.gamedev.net/topic/549973-opengl--glreadpixels--and-gldrawpixels/),但尽管在包含glew.h后正确编译,但屏幕上没有看到任何文本(我使用了Nehe自定义的glPrint例程来显示文本)。 - user4706825

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接