【问题标题】:Draw 2D Text in fixed position on the display in a 3D world - OpenGL在 3D 世界中的显示器上的固定位置绘制 2D 文本 - OpenGL
【发布时间】:2015-05-27 14:44:06
【问题描述】:

我正在用 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();

【问题讨论】:

  • 您可以使用不同的视图矩阵来呈现文本。首先像现在一样绘制场景,然后将矩阵更改为正交投影和适当的视图矩阵并绘制文本。
  • 感谢您的回答。我刚刚用我写的代码更新了我的问题,但是没有用。

标签: c++ opengl text 3d


【解决方案1】:

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

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

glWindowPos2i(100, 100);

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

【讨论】:

  • 这可能是我的问题的解决方案,但我无法直接利用它,因为微软从 1.2 开始无法解释对 openGL 的支持。我寻找了一些有关如何使用它的解决方案,例如本次讨论的最后一篇文章 (gamedev.net/topic/549973-opengl--glreadpixels--and-gldrawpixels),但是尽管在包含 glew.h 后它可以正确编译,但我在屏幕上看不到任何文本(我使用了 Nehe自定义 glPrint 例程以显示文本)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
相关资源
最近更新 更多