我试图在我正在渲染的 3D 纹理之上显示一个文本覆盖(基本上是一个显示我的键盘快捷键的帮助屏幕)。纹理效果很好,我为用户提供了一些东向使用的旋转和平移。
我的想法是使用
const unsigned char tmp[100] = "text to render";
glRasterPos2i(x, y);
glColor4b(255, 255, 255, 255);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, tmp);
正如如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕中所建议的那样?.
这很好用,只是文本现在随对象旋转,而不是保持在屏幕上的静态位置。我阅读了一些文档,发现当您操作模型视图矩阵时会操作 glRasterPos 函数:
glRasterPos 呈现的对象坐标就像 glVertex 命令一样处理:它们由当前模型视图和投影矩阵转换并传递到裁剪阶段。
-来源
然后我通过另一篇文章发现,您可以使用 glPushMatrix 和 glPopMatrix 推送和弹出当前矩阵。
-来源
当我这样做时,文本会一起消失。起初我以为文本的坐标可能有误,但我以 0.01 的间隔尝试了 x=y=0 到 x=y=25,但从未看到文本。我仍然可能误解了应该在哪里绘制,但我不确定接下来要尝试什么。
我的绘图功能正在调用类似于:
glLoadIdentity();
glPushMatrix();
glTranslatef(0,0,-sdepth);
glRotatef(-stheta, 1.0, 0.0, 0.0);
glRotatef(sphi, 0.0, 0.0, 1.0);
glRotatef(rotateX,0,1,1);
glRotatef(rotateY,1,0,0);
glTranslatef(-0.5,-0.5,-0.5);
glPopMatrix();
glRasterPos2i(2, 2);
glColor4b(255, 255, 255, 255);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, tmp);
任何人都对调试/故障排除步骤有任何建议,以尝试将此文本显示在屏幕上的单个静态位置?