Opengl 如何使用glutStrokeCharacter而不考虑世界';s州

Opengl 如何使用glutStrokeCharacter而不考虑世界';s州,opengl,glut,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状态

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

需要时,只需根据需要更改投影和模型视图即可。任何时候都可以开始一个全新的矩阵。你知道:glLoadIdentity,还有其他


更新:伪代码:
专业提示:在显示功能中执行所有OpenGL操作,并且不要在窗口大小调整处理程序中设置投影和视口。一旦您认为设置投影是一项常规操作且没有什么特别之处,许多看似困难的问题就会消失。

只要在需要时根据需要更改投影和模型视图即可。任何时候都可以开始一个全新的矩阵。你知道:glLoadIdentity,还有其他


更新:伪代码:
专业提示:在显示功能中执行所有OpenGL操作,并且不要在窗口大小调整处理程序中设置投影和视口。一旦你认为设置投影是一种常规操作,没有什么特别之处,许多看似困难的问题就会消失。

是否需要切换到glOrtho?@igalk:既然你希望文本“在一个恒定的位置,而不管我的相机的位置和它的外观向量”,我会说是的,需要使用正交投影。你可以算出让透视投影工作的数学公式,但你不会通过采取艰难的方式节省任何东西。我想我这样问这个问题犯了一个小错误,我只是想在屏幕的左上角显示fps的数量。问题是-我是否需要计算文本相对于透视图的位置的数学,等等,还是有更简单的方法。不管怎样。。我需要一个提示/帮助代码示例,因为我现在迷路了。@igalk:是的,有一个更简单的方法:更改投影。@datenwolf:你能添加一个小示例吗?我不太清楚该怎么做。是否需要切换到glOrtho?@igalk:既然你希望文本“在一个恒定的位置,而不管我的相机的位置和它的外观向量”,我想说是的,需要使用正交投影。你可以算出让透视投影工作的数学公式,但你不会通过采取艰难的方式节省任何东西。我想我这样问这个问题犯了一个小错误,我只是想在屏幕的左上角显示fps的数量。问题是-我是否需要计算文本相对于透视图的位置的数学,等等,还是有更简单的方法。不管怎样。。我需要一个提示/帮助代码示例,因为我现在迷路了。@igalk:是的,有一个更简单的方法:更改投影。@datenwolf:你能添加一个小示例吗?我不太清楚怎么做。
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()