【问题标题】:Using GLUT bitmap fonts使用 GLUT 位图字体
【发布时间】:2010-09-06 01:43:50
【问题描述】:

我正在编写一个使用GLUT 的简单OpenGL 应用程序。我不想滚动自己的字体渲染代码,而是想使用GLUT 附带的简单位图字体。让它们发挥作用的步骤是什么?

【问题讨论】:

    标签: opengl fonts bitmap glut


    【解决方案1】:

    在 OpenGL 中使用 GLUT 位图字体很容易实现简单的文本显示。这些是简单的 2D 字体,适合在您的 3D 环境中显示内部。但是,它们非常适合需要覆盖在显示窗口上的文本。

    以下是在 GLUT 窗口上以绿色显示 Eric Cartman 最喜欢的名言的示例步骤:

    我们将在屏幕坐标中设置光栅位置。因此,为 2D 渲染设置投影和模型视图矩阵:

    glMatrixMode(GL_PROJECTION);
    glPushMatrix();
    glLoadIdentity();
    gluOrtho2D(0.0, WIN_WIDTH, 0.0, WIN_HEIGHT);
    
    glMatrixMode(GL_MODELVIEW);
    glPushMatrix();
    glLoadIdentity();
    

    设置字体颜色。 (现在设置,不要稍后设置。)

    glColor3f(0.0, 1.0, 0.0); // Green
    

    设置应显示文本的窗口位置。这是通过在屏幕坐标中设置光栅位置来完成的。窗口的左下角为 (0, 0)。

    glRasterPos2i(10, 10);
    

    使用glutBitmapCharacter设置字体并显示字符串。

    string s = "Respect mah authoritah!";
    void * font = GLUT_BITMAP_9_BY_15;
    for (string::iterator i = s.begin(); i != s.end(); ++i)
    {
        char c = *i;
        glutBitmapCharacter(font, c);
    }
    

    恢复矩阵。

    glMatrixMode(GL_MODELVIEW);
    glPopMatrix();
    
    glMatrixMode(GL_PROJECTION);
    glPopMatrix();
    

    【讨论】:

    • 我在 3D 世界坐标中有一些对象,我需要在视口上的固定位置显示覆盖文本。我尝试了这种方法,但它没有给我固定的覆盖文本。相反,它给了我随着相机移动而旋转的文本。你如何让它发挥作用?
    • @Papouh:这很奇怪。如果您注意到,我正在使用的调用是 2D 的,所以对于窗口。他们不应该在 3D 中移动。
    • @Ashwin:当我写上一条评论时,我做错了一些事情。但主要问题是我在您的示例中使用glOrtho2D 而不是glOrtho。这解决了问题。
    • 有时这可能需要一些修改才能工作。看到这个帖子:stackoverflow.com/a/21923064/1767377
    猜你喜欢
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    相关资源
    最近更新 更多