使用GLUT位图字体

19

我正在编写一个简单的基于 OpenGLGLUT 的应用程序。我不想自己编写字体渲染代码,而是希望使用 GLUT 提供的简单位图字体。那么要让它们起作用,需要哪些步骤?

1个回答

29

使用GLUT位图字体在OpenGL中显示简单的文本非常容易。这些是简单的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
@Papouh:这很奇怪。如果你注意到,我使用的调用是2D的,所以是针对窗口的。它们不应该在3D中移动。 - Ashwin Nanjappa
@AshwinпјҡеңЁжҲ‘еҶҷе…ҲеүҚзҡ„иҜ„и®әж—¶пјҢжҲ‘еҒҡдәҶдёҖдәӣй”ҷиҜҜзҡ„дәӢжғ…гҖӮдҪҶдё»иҰҒй—®йўҳжҳҜжҲ‘дҪҝз”ЁдәҶдҪ зҡ„зӨәдҫӢдёӯзҡ„glOrtho2DиҖҢдёҚжҳҜglOrthoгҖӮиҝҷи§ЈеҶідәҶй—®йўҳгҖӮ - Papouh
有时候这可能需要一些修改才能正常工作。请参考此帖子:https://dev59.com/2nbZa4cB1Zd3GeqPLe38#21923064 - SyntaxRules

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接