如何使用glutStrokeCharacter无论世界的状态

时间:2012-03-29 21:05:22

标签: opengl glut

我尝试使用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 );
}

1 个答案:

答案 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操作都不会在窗口调整大小处理程序中设置投影和视口。一旦你认为投影作为一个常规操作而没有什么特别的,那么很多看似困难的问题就会消失。