在3D世界中的显示器上固定位置绘制2D文本-OpenGL



我正在用C++创建一个非常简单的OpenGL游戏,3D模型在3D世界中移动。我必须在屏幕上放一些2D文本:相机一直在跟踪模型,我希望文本显示在相对于窗口的固定位置。

我试着使用Nehe的教程,但在这种情况下,gluLookAt处于固定位置(从"高处"向下看世界),文本显然显示正确。

不幸的是,我没有用glRotatef/glTranslatef成功地完成我想要的操作。

有人能帮我吗?当相机移动时,如何在固定位置显示文本?我已经在其他线程中寻找了解决方案,但在没有一个线程中我找到了合适的解决方案(特别是,利用供过于求函数的解决方案,这是非常常见的,在我的情况下似乎不起作用)。

我还假设我已经实现了构建/杀死字体等的所有功能,正如我在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();

最简单的方法是使用glWindowPos()而不是glRasterPos()来设置当前光栅位置。glWindowPos()允许您指定窗口坐标中的位置,以像素为单位。

例如,要将位置设置为(100100),原点在左下角:

glWindowPos2i(100, 100);

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

最新更新