如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?

Posted

技术标签:

【中文标题】如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?【英文标题】:How do I use glutBitmapString() in C++ to draw text to the screen? 【发布时间】:2009-02-12 23:45:00 【问题描述】:

我正在尝试使用 GLUT 在 2d 中将文本绘制到屏幕上。

我想使用 glutBitmapString(),有人可以给我看一个简单的例子,说明在 C++ 中设置和正确使用此方法所需要做的事情,以便我可以在 (X,Y) 位置绘制任意字符串?

glutBitmapString(void *font, const unsigned char *string); 

我正在使用 linux,并且我知道我需要创建一个 Font 对象,尽管我不确定如何以及我可以将字符串作为第二个参数提供给它。但是,如何同时指定 x/y 位置?

一个简单的例子对我有很大帮助。如果你能告诉我从创建字体到调用最好的方法。

【问题讨论】:

【参考方案1】:

在调用glutBitmapString() 之前,您必须使用glRasterPos 设置光栅位置。请注意,每次调用glutBitmapString() 都会推进光栅位置,因此多次连续调用将一个接一个地打印出字符串。您还可以使用glColor() 设置文本颜色。列出了可用字体集here。

// Draw blue text at screen coordinates (100, 120), where (0, 0) is the top-left of the
// screen in an 18-point Helvetica font
glRasterPos2i(100, 120);
glColor4f(0.0f, 0.0f, 1.0f, 1.0f);
glutBitmapString(GLUT_BITMAP_HELVETICA_18, "text to render");

【讨论】:

感谢亚当的帮助。另外,很长一段时间它一直告诉我 glutBitmapString 没有定义,我最终在 GL/glui.h 中发现它被命名为“_glutBitmapString”。知道为什么吗? glutBitmapString 是在freeglut 上实现的扩展,在旧的glut 中不存在,必须包含GL/freeglut.h 而不是GL/glut.h【参考方案2】:

添加到亚当的答案,

glColor4f(0.0f, 0.0f, 1.0f, 1.0f);  //RGBA values of text color
glRasterPos2i(100, 120);            //Top left corner of text
const unsigned char* t = reinterpret_cast<const unsigned char *>("text to render");
// Since 2nd argument of glutBitmapString must be const unsigned char*
glutBitmapString(GLUT_BITMAP_HELVETICA_18,t);

查看https://www.opengl.org/resources/libraries/glut/spec3/node76.html 了解更多字体选项

【讨论】:

以上是关于如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?的主要内容,如果未能解决你的问题,请参考以下文章

围绕其中心旋转 GLUT 位图/笔划字符串?

C++ 如何在 C++ 中使用 dlopen()?

如何在 Visual C++ 2010 中使用 C++ 库 [重复]

在 windows 中,如何使用 c++ 检查端口是不是免费

如何在 C++ 中正确使用命名空间?

如何在 C++ 中使用 CPR 库?