我尝试使用GLUT在屏幕上打印一些文字,代码如下:
glPushMatrix();
glTranslatef(2, 2, 0);
glScalef(0.2, 0.2, 0.2);
for (char *p = m_strFpsMessage; *p; p++)
glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
glPopMatrix();
在上面的代码我试图打印一些关于我的FPS状态的信息,问题是文本是在3D世界而不是2D世界中打印的。无论相机的位置和外观向量如何,我都希望将文本保持在一个恒定的位置。
我在这里做错了什么?
编辑:我试图运行下一个代码,但结果仍然是3D
glMatrixMode( GL_PROJECTION );
glLoadIdentity();
glPushMatrix();
glOrtho(constVal[0][0], constVal[1][0], constVal[0][1], constVal[1][0], 0.0001,10000);
glMatrixMode( GL_MODELVIEW );
glLoadIdentity();
glPushMatrix();
glTranslatef(2, 2, 0);
glScalef(0.2, 0.2, 0.2);
for (char *p = m_strFpsMessage; *p; p++)
glutStrokeCharacter(GLUT_STROKE_ROMAN, *p);
glPopMatrix();
glPopMatrix();
glMatrixMode( GL_PROJECTION );
}
答案 0 :(得分:3)
只需在需要时将投影和模型视图更改为您的需求。随时启动全新的矩阵是完全有效的。你知道:glLoadIdentity,其余的。
display_scene:
glViewport(...)
glMatrixMode(GL_PROJECTION)
setup_projection()
glMatrixMode(GL_MODELVIEW)
setup_modelview()
draw_scene()
glMatrixMode(GL_PROJECTION)
setup_hud_projection()
glMatrixMode(GL_MODELVIEW)
setup_hud_modelview()
draw_hud()
Pro-Tip:显示功能和 中的所有OpenGL操作都不会在窗口调整大小处理程序中设置投影和视口。一旦你认为投影作为一个常规操作而没有什么特别的,那么很多看似困难的问题就会消失。