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

标签 c++ opengl text 3d

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

最佳答案

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

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

glWindowPos2i(100, 100);

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

关于c++ - 在 3D 世界的显示器上的固定位置绘制 2D 文本 - OpenGL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29230086/

相关文章:

c++ - 如何使用无绑定(bind)指定 UBO 绑定(bind)?

c++ - 在 pugi xml_node 中保存 PUGI XML 树的子树

c++ - C++ 标准要求使用 allocator::rebind 吗?

c++ - 类型转换 c++, quadmath

c++ - 编译器在什么阶段执行内联?

linux - 如何在 Linux 上编译和运行来自交互式计算机图形的代码 - 基于着色器的 OPENGL®(第 6 版)的自上而下的方法?

OpenGL:我可以从深度缓冲区中屏蔽完全透明的片段吗?

c++ - 从文本文件中选取数组元素

plot - Vega-Lite - 如何在每个 nar 中绘制带有标签的堆叠条形图?

php - 使用 PHP 从 <option> 标签获取文本